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
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.