VRaptor3 - Acesso ao formulario para inclusão de dados [RESOLVIDO]

Não consigo acessar o formulario para inclusão:

@Resource
public class ItemController {
	private final DaoFactory daoFactory;
	private final Result result;
	private final Validator validator;
	 
	public ItemController(DaoFactory daoFactory, Result result, Validator validator) {
		this.daoFactory = daoFactory;
		this.result = result;
		this.validator = validator;
	}
	
	@Get
	@Path("/item/lista")
	public Collection<Item> lista() {
	return this.daoFactory.getItemDao().listaTudoOrdenado();
	}

	@Get
	@Path("/item/formulario/{item.id}") 
	public Item formulario(Item item) {
	   result.include("itens", this.daoFactory.getItemDao().listaTudoOrdenado());
	   return this.daoFactory.getItemDao().procura(item.getId());
	}
	
	@Get
	@Path("/item/formularioInclusao")
	public  void formularioInclusao() {
	}

o meu formulario está com o method = “Post”:

/item/formularioInclusao.jsp

quando tento acessar o formulario: “/item/formularioInclusao”

aparece o seguinte erro:

Obs.: Os outros metodos funcionam normalmente. Estou testando somento o acesso a camada de visualização, não implementei o resto (gravação).

exception

br.com.caelum.vraptor.http.InvalidParameterException: unable to parse expression 'item.id'
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:161)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:126)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:102)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:54)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:51)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:58)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:45)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:70)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:71)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:99)
	br.com.caelum.vraptor.ioc.pico.PicoProvider.provideForRequest(PicoProvider.java:182)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:97)

cause m�re

ognl.OgnlException: id [java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key is_not_a_valid_integer]
	ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:103)
	ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
	ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
	ognl.ASTProperty.setValueBody(ASTProperty.java:127)
	ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
	ognl.SimpleNode.setValue(SimpleNode.java:279)
	ognl.ASTChain.setValueBody(ASTChain.java:227)
	ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
	ognl.SimpleNode.setValue(SimpleNode.java:279)
	ognl.Ognl.setValue(Ognl.java:737)
	ognl.Ognl.setValue(Ognl.java:783)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:152)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:126)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:102)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:54)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:51)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:58)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:45)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:70)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:71)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:99)
	br.com.caelum.vraptor.ioc.pico.PicoProvider.provideForRequest(PicoProvider.java:182)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:97)

cause m�re

java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key is_not_a_valid_integer
	java.util.ResourceBundle.getObject(ResourceBundle.java:384)
	java.util.ResourceBundle.getString(ResourceBundle.java:344)
	br.com.caelum.vraptor.converter.LongConverter.convert(LongConverter.java:55)
	br.com.caelum.vraptor.converter.LongConverter.convert(LongConverter.java:1)
	br.com.caelum.vraptor.http.ognl.VRaptorConvertersAdapter.convertValue(VRaptorConvertersAdapter.java:68)
	ognl.OgnlRuntime.getConvertedType(OgnlRuntime.java:1040)
	ognl.OgnlRuntime.getConvertedTypes(OgnlRuntime.java:1057)
	ognl.OgnlRuntime.getConvertedMethodAndArgs(OgnlRuntime.java:1083)
	ognl.OgnlRuntime.getAppropriateMethod(OgnlRuntime.java:1169)
	ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1183)
	ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
	ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
	ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
	ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
	ognl.ASTProperty.setValueBody(ASTProperty.java:127)
	ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
	ognl.SimpleNode.setValue(SimpleNode.java:279)
	ognl.ASTChain.setValueBody(ASTChain.java:227)
	ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
	ognl.SimpleNode.setValue(SimpleNode.java:279)
	ognl.Ognl.setValue(Ognl.java:737)
	ognl.Ognl.setValue(Ognl.java:783)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:152)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:126)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:102)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:54)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:51)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:58)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:45)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:70)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:71)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:99)
	br.com.caelum.vraptor.ioc.pico.PicoProvider.provideForRequest(PicoProvider.java:182)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:97)

Obrigado

a sua implementação de Item tem um método “setId” ? se nao tiver deve ser isso.

galmeida

Tem sim!

esse erro acontece quando você acessa o formulário ou quando você submete?

pelo erro, parece que vc tá passando algo que não é número pra um campo numérico… e daí ele não consegue
setar o id…

[]'s

Acontece quando eu acesso.
Me parece que ele acha que tenho que passar um parâmetro.

creio que de qualquer maneira a exception lancada deveria ser mais explicita, explicando melhor que esta faltando o parametro item.id

você tem alguma lógica que responde à url:

"/item/{item.id}"
ou algo do tipo?

Era isso mesmo!

tinha outra lógica com: /item/{item.id}. Tentava acessar ela, só que, ao tentar converter o que tinha depois da / para integer, dava erro.

Renomei minhas lógicas para /item/nomeDoMetodo/{item.id} e o erro deixou de acontecer.

Obrigado.

é bom entao que o vraptor lance uma exception, ou ao menos um log.warn, indicando a duplicidade, nao?
pois essa exception lancada vai fazer muitos desenvoveldores perderem muito tempo ate encontrar esse motivo.

cadastrei o bug já…
Lagaffe, você não precisa mudar sua url por causa disso…

é só você colocar a prioridade da url pra mais baixa:

@Path(priority = 2, value="/item/{item.id}")

@Path(priority = 1, value="/item/formularioInclusao")

daí ele tenta usar a de prioridade menor primeiro…

[]'s

Silveira e no meu caso… o erro que me persegue hoje é:

27/08/2009 15:58:29 org.apache.catalina.session.StandardSession writeObject
WARNING: Cannot serialize session attribute br.com.caelum.vraptor.ioc.pico.PicoComponentRegistry.session for session 3D3EB0552F1448CA967C8CCA473889A4
java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at java.util.ArrayList.writeObject(ArrayList.java:570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1517)
at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:959)
at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:517)
at org.apache.catalina.session.StandardManager.unload(StandardManager.java:463)
at org.apache.catalina.session.StandardManager.stop(StandardManager.java:667)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4573)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:924)
at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1248)
at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1219)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:316)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1086)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1098)
at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
at org.apache.catalina.core.StandardService.stop(StandardService.java:584)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
at org.apache.catalina.startup.Catalina.stop(Catalina.java:633)
at org.apache.catalina.startup.Catalina.start(Catalina.java:608)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
27/08/2009 15:58:38 org.apache.catalina.core.ApplicationContext log

Oi Agaraujo!

atualize para o beta 3, onde o container default é o spring.

isso ai ocorre quando voce reloada o contexto, e o tomcat quer serializar a sessao atual para depois puxa-la na memoria, e o container do pico nao é serializavel.

Lucas, prefiro deixar desta forma, com URL bem claras e diferentes. Não me incomoda, acho até melhor em vários casos, e é menos arriscado. Se surgir a necessidade de URL’s iguais vou fazer do jeito que você orientou.

Opa valeu!! Vou atrás do 3.

Meu amigos disseram que é meio loucura, mas como adorei o VRaptor, estou usando ele em produção… Para o que desejo ele vai me atender MUITO BEM, mesmo beta… só espero ter poucos problemas como este, pois mesmo com este erro ele funcionava sem problemas!!

Vlw e qualquer coisa to postando aqui no GUJ e pedindo sua ajuda e de alguns companheiros!!

Só para deixar claro…Então terei que utilizar o Spring OBRIGATORIAMENTE? Ou tem outra maneira?

estamos usando o vraptor 3 beta em diversos sistemas em producao.

o spring eh usado internamente pelo vraptor para fazer a injecao de dependencias. voce nao precisa usa-lo se nao precisa, mas voce pode usa-lo se quiser, e criar seu application-context.xml.

mas, se quiser que ele use o pico internamente (nao fara diferencas para voce se voce nao for acessar o pico diretamente), pode configurar isso. ele so vai dar essa mensaagem de erro pois nao consegue serializar a sessao (estamos resolvendo isso) quando houver um reload de contexto, ou se voce usar o tomcat clusterizado e ele precisar mgirar uma sessao de um nó para outro.

Blz! Então vlw e até a próxima!!!

P.S. Errinho chato… ou eu sou chato para ver erros… dá pra depois colocar algo mais elegante não?! (NO CASO DE NÃO UTILIZAR O CONTEXTO DO SPRING) - Só uma sugestão!!