Tenho uma aplicação struts e estou integrando uma aplicação jquery (http://code.google.com/p/jquery-week-calendar/) para inserir um calendario estilo google agenda.
Nela tenho um método funcionando e estou precisando adapta-lo a minha aplicaçao
Segue abaixo o método funcionando onde ele retorna um objeto com conteudo do seguinte array…
function getEventData() {
var year = new Date().getFullYear();
var month = new Date().getMonth();
var day = new Date().getDate();
return {
events : [
{"id":1, "start": new Date(year, month, day, 12), "end": new Date(year, month, day, 13, 30),"title":"Lunch with Mike"},
{"id":2, "start": new Date(year, month, day, 14), "end": new Date(year, month, day, 14, 45),"title":"Dev Meeting"},
{"id":3, "start": new Date(year, month, day + 1, 17), "end": new Date(year, month, day + 1, 17, 45),"title":"Hair cut"},
{"id":4, "start": new Date(year, month, day - 1, 8), "end": new Date(year, month, day - 1, 9, 30),"title":"Team breakfast"},
{"id":5, "start": new Date(year, month, day + 1, 14), "end": new Date(year, month, day + 1, 15),"title":"Product showcase"},
{"id":6, "start": new Date(year, month, day, 10), "end": new Date(year, month, day, 11),"title":"I'm read-only", readOnly : true}
]};
}
Logo para atender minhas necessidades, preciso fazer uma requisição ao meu servidor via ajax para retornar um objeto json com as suas respectivas propriedades para ser exibida na tela.
Segue abaixo a declaração e suas referencias:
Struts.xml
<package name="input" extends="json-default">
<action name="testeJson" class="eventsAction" method="teste">
<result type="json"></result>
</action>
</package>
</struts>
método na action “eventsAction”
public String teste() throws JSONException{
JSONObject obj = new JSONObject();
Integer year = new Date().getYear();
Integer month = new Date().getMonth();
Integer day = new Date().getDay();
events = new ArrayList<Events>();
//Objeto event(Integer id,Date start,Date end,String title);
events.add(new Events(1,new Date(year,month,day,2,15),new Date(year,month,day,3,18),"teste" ));
events.add(new Events(2,new Date(year,month,day,4,16),new Date(year,month,day,6,17),"teste1" ));
events.add(new Events(3,new Date(year,month,day,7,17),new Date(year,month,day,8,18),"teste2" ));
events.add(new Events(4,new Date(year,month,day,9,18),new Date(year,month,day,10,19),"teste3" ));
obj.put("events", events);
return Action.SUCCESS;
}
Novo método modificado
function getEventData() {
var year = new Date().getFullYear();
var month = new Date().getMonth();
var day = new Date().getDate();
var myObj;
var xmlHttp;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){ // Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
alert("Seu navegador não suporta AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState==4){
myObj = xmlHttp.responseText;
}
}
xmlHttp.open("POST","TIB2/testeJson.action",true);
xmlHttp.send(null);
alert("As informações serão exibidas");
return eval('('+myObj+')');
}
retorno:
{“events”:[
{“end”:“2009-10-03T03:18:00”,“id”:1,“start”:“2009-10-03T02:15:00”,“title”:“teste”},
{“end”:“2009-10-03T06:17:00”,“id”:2,“start”:“2009-10-03T04:16:00”,“title”:“teste1”},
{“end”:“2009-10-03T08:18:00”,“id”:3,“start”:“2009-10-03T07:17:00”,“title”:“teste2”},
{“end”:“2009-10-03T10:19:00”,“id”:4,“start”:“2009-10-03T09:18:00”,“title”:“teste3”}
]}
Logo não carrega-se nada na tela pois o conteudo da variavel myObj é Undefined;
Li que isto ocorre pois a requisição ajax é assincrona portanto o método javascript não espera resposta do servidor para continuar executando o método.
Preciso retornar o objeto “events” e seu array preenchido para ele ser exibido na tela.
Não sei também se desta forma return eval('('+myObj+')');
retornarei este objeto da forma correta.
Alguma ajuda por favor…
Att.