[RESOLVIDO] Dúvida sobre Validator (ExtJS 4 + Json + VRaptor 3.4.0)

Tenho que baixar algum jar? qual? ficou assim a classe:

[code]import br.com.caelum.vraptor.interceptor.TypeNameExtractor;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.serialization.xstream.VRaptorClassMapper;
import br.com.caelum.vraptor.serialization.xstream.XStreamBuilder;

import com.google.common.base.Suppliers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.collections.CollectionConverter;

@Component
public class PersistentBagConverter extends CollectionConverter {

public PersistentBagConverter(TypeNameExtractor extractor) {    
	   super(new VRaptorClassMapper(new XStream().getMapper(), Suppliers.ofInstance(extractor)));  
	}  

@Override  
@SuppressWarnings("rawtypes")  
public boolean canConvert(Class type) {  
    return Collection.class.isAssignableFrom(type);  
}  

}
[/code]

e utilizei o json assim:

result.use(Results.json()).from(grupos).serialize();

.

o xml dessa classe: org/xmlpull/v1/XmlPullParserException

dica: http://www.findjar.com

Aparece um milhao de coisas, usando o exemplo que vc mandou do ext pra ver o comentário do José Maria de Oliveira, deu certo, agora sim a tela está abrindo normalmente trazendo tudo, menos as TELAS rs…já é um progresso né?
alguma sugestão pra consertar isso? vem tudo abrew tudo normal…excluo, altero adiciono…mas não vem a lista de Telas ainda.

sim, é um progresso…

o campo telas não deve estar inicializado…

tenta fazer o seguinte então…

-sobrescreva o método marshall no collectionConverter:

@Override
public void marshall(Object value, ....) {
     super.marshall(new ArrayList((Collection) value), ....);
}

Onde fica essas classe? eh o PersistentBagConverter?

ou nesse PersistentBagConverter, ou no cara que vc copiou do Jose Maria (que tem um collection converter lá)

Dá erro, pede pra tirar o override, dai tiro da erro nos pontinhos. Desculpe a minha ignorância.

é pra vc sobrescrever o método… os pontinhos é pq eu não estava com vontade de ir até o source da classe pra lembrar qual era a assinatura do método mesmo.

se estiver no eclipse, ctrl + espaço no meio da classe numa linha em branco fora de métodos, e escolher o “Override method marshall”

em todo caso:

public void marshall(Object value, HierarchicalStreamWriter writer, MarshalingContext context) {  
     super.marshall(new ArrayList((Collection) value), writer, context);  
}  

Consegui fazer o metodo e tals, mas pede pra renomear o: marshall…e tirar o Override.

 super.marshall(new ArrayList((Collection) value), writer, context);

ajusta pro nome certo então :wink: e copia pro nome do método que tá com @Override

Pra programar em java é importante saber ler os erros que o compilador (ou o eclipse) te dá e saber como corrigir… o ctrl + 1 do eclipse (ou clique no erro) já te falaria como corrigir esses problemas.

Consegui deixar o metodo na classe, mas ainda vem com o mesmo erro!

br.com.caelum.vraptor.VRaptorException: Unable to find converter for org.cinemotion.entity.GrupoTela

isso acontece qdo vc posta um json para o servidor, ou qdo vc passa um form normal?

Creio que seja a segunda opção, bom, eu pego as telas por esse metodo:

[code]@Path("/grupo/telas/{idd}/dados.json")
public void gruposPorTela(GrupoTela idd) throws Exception {

	result.use(ExtJSJson.class).from(grupoService.getById(idd).getTelas()).serialize();
}[/code]

No console aparece isso sobre esse metodo:

11:07:05,087 DEBUG [DefaultResourceTranslator] trying to access /grupo/telas/26/dados.json
11:07:05,089 DEBUG [VRaptorRequest ] Setting idd with [26]
11:07:05,089 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: GrupoTvController.gruposPorTelaGrupoTvController.gruposPorTela(GrupoTela)]
11:07:05,120 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
11:07:05,120 DEBUG [JstlLocalization ] couldn’t find message bundle, creating an empty one
11:07:05,121 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for GrupoTvController.gruposPorTela(GrupoTela) as [idd]

todas as telas vem assim por Json, vem o id dela e esse erro acima.

se vc quer setar o id do grupoTela, vc tem que colocar:

@Path("/grupo/telas/{idd.id}/dados.json")

ou qqer que seja o nome do id…

O erro todo estava aqui mesmo:

[code]@Path("/grupo/telas/{id}/dados.json")
public void gruposPorTela(Integer idd) throws Exception {

	result.use(ExtJSJson.class).from(grupoService.getById(idd).getTelas()).serialize();
}[/code]

onde estava GrupoTela idd trokei por Integer idd, e funcionou, obrigado pela atenção aqui!

Deixa tirar uma dúvida por favor, estou tentando pegar uma lista de date, e não consigo, isso seria o vraptor ou o ext?
estou formatando corretamente o jeito que vem do banco e tals, mas mesmo assim nao aparece a hora…tras por json errado tb…nao tras formatado!
e na tela nem aparece…

vc vai precisar escrever o converter de data pro xstream fazer do jeito que vc quer… Se for vraptor 3.4.x:

@Component
public class MeuDateConverter implements SingleValueConverter {
    //type => Calendar, date, ou o que for sua data
   // toString e fromString, auto-explicativos.
}

Então lucas eh assim, o atributo eh Date com anotação TIME, que vem somente o horário, quero formatar o horário, da pra fazer desse mesmo jeito?tem algo do tipo “H:m:s”?

obrigado.

Se vc quer fazer esse tipo de coisa, considere usar o joda-time, que tem um tipo LocalTime que guarda só hora.

assim vc não vai precisar ficar fazendo ifs pra saber se o date tem ou não hora.