Json Calendar vRaptor

8 respostas
Fmgasparino

Ola pessoal, estou com uma duvida, pois meu json esta retornando um [object], imagino que deso fazer o date format, mas como tudo é automatico, não sei onde fazer,… Alguem sabe onde?

public void edita(Paciente paciente) {
		Paciente pacienteProcurado = pacienteDao.buscaPorId(paciente);
		result.use(json()).from(pacienteProcurado).serialize();
	}
<script type="text/javascript">
function consultar(id) {
	$.getJSON('<c:url value="/paciente/edita/" />' + id, function(json) {
		$('#id').val(json.paciente.id);
		$('#nome').val(json.paciente.nome);

		$('#telefone').val(json.paciente.telefone);
		$('#celular').val(json.paciente.celular);
		$('#email').val(json.paciente.email);

		$('#cpf').val(json.paciente.CPF);
		$('#rg').val(json.paciente.RG);
		$('#dataNascimento').val(json.paciente.dataNascimento);
		$('#dataCadastro').val(json.paciente.dataCadastro);
		$('#celular').val(json.paciente.celular);
		$('#email').val(json.paciente.email);
		$('#cep').val(json.paciente.cep);
		$('#complemento').val(json.paciente.complemento);
		$('#endereco').val(json.paciente.endereco);
		$('#bairro').val(json.paciente.bairro);
		$('#cidade').val(json.paciente.cidade);
		$('#estado').val(json.paciente.estado);
		$('#numero').val(json.paciente.numero);
		$('#sexoMasculino').val(json.paciente.sexo);
		$('#sexoFeminino').val(json.paciente.sexo);
	})
}
</script>

Valeu

8 Respostas

Lucas_Cavalcanti

vc precisa adicionar um converter de Date (ou Calendar ou o que vc estiver usando)…

crie a classe:

@Component
public class CustomJSONSerialization extends XStreamJSONSerialization {

   //delegate constructor

   @Override
   protected XStream getXStream() {
       XStream stream = super.getXStream();
       stream.registerConverter(new CustomDateConverter());
       return stream;
   }

}

e vc cria a classe CustomDateConverter, implementando Converter do XStream. Só implemente o método marshal, pode deixar o unmarshal em branco

Lucas_Cavalcanti

pra ficar mais fácil:

public class CustomDateConverter extends AbstractSingleValueConverter {

    canConvert => Date.class // ou o que quer q seja

    fromString => pode deixar em branco

    toString(Object) => converta usando o seu formato

}
Fmgasparino
Lucas Cavalcanti:
pra ficar mais fácil:
public class CustomDateConverter extends AbstractSingleValueConverter {

    canConvert => Date.class // ou o que quer q seja

    fromString => pode deixar em branco

    toString(Object) => converta usando o seu formato

}
@Override
	public boolean canConvert(Class c) {
		// TODO Auto-generated method stub
		return false;
	}

Recebo uma classe, e verifico se é Calendar? Caso seja retorna True ?

From String mantenho...
@Override
	public Object fromString(String arg0) {
		// TODO Auto-generated method stub
		return null;
	}
e crio o
toString(Calendar calendar){

  SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");  
          
        Date datam2 = calendar;  
        try{  
            datam2 = (Date) dateFormat.parse(form2.datam2);  
            }catch(ParseException e){  
            e.printStackTrace();  
        }  

}

Esta correto?

Valeu

Lucas_Cavalcanti

quase isso… só que no toString vc tem que fazer um format, não um parse

Fmgasparino
Lucas Cavalcanti:
quase isso... só que no toString vc tem que fazer um format, não um parse

Precisa definir mais alguma coisa?

Pois criei estas duas classes:
package br.com.everest.go.bean.auxiliar;

import javax.servlet.http.HttpServletResponse;

import br.com.caelum.vraptor.interceptor.TypeNameExtractor;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.serialization.xstream.XStreamJSONSerialization;

import com.thoughtworks.xstream.XStream;

@Component  
public class CustomJSONSerialization extends XStreamJSONSerialization {  
  
   //delegate constructor  
  
   public CustomJSONSerialization(HttpServletResponse response,
			TypeNameExtractor extractor) {
		super(response, extractor);
		// TODO Auto-generated constructor stub
	}

@Override  
   protected XStream getXStream() {  
       XStream stream = super.getXStream();  
       stream.registerConverter(new CustomDateConverter());  
       return stream;  
   }  
  
}
package br.com.everest.go.bean.auxiliar;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;

public class CustomDateConverter extends AbstractSingleValueConverter {

	@Override
	public boolean canConvert(Class c) {
		if (c.equals(Calendar.class)) {
			return true;
		}
		return false;
	}

	@Override
	public Object fromString(String arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String toString(Object obj) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

		Calendar calendar = (Calendar) obj;
		try {
			return dateFormat.format(calendar);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}

Reiniciei, e continua me retornando Object object nos campos data...

Lucas_Cavalcanti

paciente.dataNascimento é um calendar?

tenta ver se ele está usando o seu converter…

e só mais uma coisa: o certo é

dateFormat.format(calendar.getTime());
Lucas_Cavalcanti

ah, troque o canConvert pra:

public boolean canConvert(Class c) {
   return Calendar.class.isAssignableFrom(c);
}
Fmgasparino

Lucas Cavalcanti:
ah, troque o canConvert pra:

public boolean canConvert(Class c) { return Calendar.class.isAssignableFrom(c); }

Loading datas Funcionando!!
Brigadao Lucas,
Voces(Caelum) estao nos agradecimentos do meu TCC…

Valeu a ajuda, vou voltar a novela do radio… rsrs

Criado 11 de outubro de 2010
Ultima resposta 11 de out. de 2010
Respostas 8
Participantes 2