Olá pessoal,
Estou escrevendo um sistema onde tenho um controller do VRaptor que possui uma lista de UserAccount. Essa lista contém todos os UserAccounts
de um sistema e preciso exibi-lá em select multi-valorado para que o usuário sejá capaz de associar os UserAccounts com o cadastro de um documento.
A parte que estou encontrando dificuldade é em criar a tag SELECT no meu jsp de modo que o Vraptor à popule para mim com os valores da lista supracitada.
Esse é o meu arquivo jsp:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Release Notes System </title>
...
</head>
<body>
<div id="container">
<jsp:include page="../common/menu.jsp"></jsp:include>
<div id="content">
<form action="<c:url value='/releaseDocument/addReleaseDocument'/>" method="post">
<table>
<tr>
<td valign="top" width="200">
Developers
</td>
<td>
<select name="releaseDocument.listUserAcount" id="releaseDocument.listUserAcount" multiple="multiple">
<c:forEach var="userAccount" items="${listUserAcount}">
<option value="${userAccount.idUserAccount}" ${selected}>${userAccount.name}</option>
</c:forEach>
</select>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
E aqui está o código do meu controller:
@Resource
public class ReleaseDocumentController {
private final Logger logger = Logger.getLogger(ReleaseDocumentController.class);
private final UserAccountDao userAccountDao;
private Result result;
[b]private List<UserAccount> listUserAccount;[/b] //essa é a lista que deve ser exibida na view
public ReleaseDocumentController(DaoFactory daoFactory, Result result) {
this.userAccountDao = daoFactory.getUserAccountDao();
this.result = result;
}
public List<ReleaseDocument> listReleaseDocument() {
List<ReleaseDocument> list = releaseDocumentDao.findAll();
return list;
}
public void formAdd(){
[b]this.listUserAccount = userAccountDao.findAll(); [/b] //nesse ponto eu populo a lista e o formAdd.jsp é chamado
logger.trace("Invoked Method -> ReleaseDocumentController::formAdd");
}
public void addReleaseDocument(Strint[] listUserAcount){
//nesse ponto eu deveria receber a lista com os UsserAccts que o usuário selecionou no formulário
releaseDocumentDao.save(releaseDocument);
}
public List<UserAccount> getListUserAccount() {
return listUserAccount;
}
public void setListUserAccount(List<UserAccount> listUserAccount) {
this.listUserAccount = listUserAccount;
}
}
Vejam que na tag <select name=“listUserAccount” id=“listUserAccount” multiple=“multiple”> eu utilizei o mesmo
nome da lista da minha action.
Alguem saberia me informar se estou no caminho certo?
baixe o último snapshot do vraptor:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100607.234700-8.jar
e use como nome do select:
listUserAccount[].id
vc pode dar qqer outro nome pra essa lista, não precisa ser listUserAccount, vc só tem que usar o mesmo nome no select e no parametro do método
Olá Lucas! Obrigado pela dica.
Fiz como vc disse, baixei essa versão do VRaptor (3.1.3-20100607.234700-8.jar) substitui o o vraptor3.1.2.jar que eu estava usando por ele e tambem mude o nome e ID do select como
voc citou, porem, ainda estou recebendo uma lista em branco.
Aqui está o html gerado
<select name="listUserAccount[].id" id="listUserAccount[].id" multiple="multiple">
</select>
Será que a minha lista está sendo disponibilizada corretamente no controller? No Struts2 eu uso o método prepare() da interface Preparable para carregar as minhas listas antes da minha página ser renderizada, porem, no VRaptor não sei se existe algo parecido.
Será que esse é o problema?
o VRaptor não popula os parametros por setters!
vc recebe o parâmetro direto no método da lógica mesmo:
public void minhaLogica(List<UserAccount> listUserAccount) {
...
}
Sim Lucas, mas o problema aqui é o inverso. Eu tenho a lista populada no meu controller. Porem os dados dessa lista não estão aparecendo no meu JSP.
O metodo que eu chamo e que direciona para o formulario onde eu preciso exibir a lista é esse:
public void formAdd(){
this.listUserAccount = userAccountDao.findAll(); //nesse ponto eu populo a lista e o formAdd.jsp é chamado
logger.trace("Invoked Method -> ReleaseDocumentController::formAdd");
}
seria o caso se eu adicionar a seguinte modificação?
public void formAdd(List<UserAccount> listUserAccount){
listUserAccount = userAccountDao.findAll(); //nesse ponto eu populo a lista e o formAdd.jsp é chamado
logger.trace("Invoked Method -> ReleaseDocumentController::formAdd");
}
O vraptor exporta os objetos via result.include ou via retorno do método; ao contrário do struts2 que exporta via atributos com setters.
public void formAdd(){
result.include("listUserAccount", userAccountDao.findAll()); //nesse ponto eu populo a lista e o formAdd.jsp é chamado
logger.trace("Invoked Method -> ReleaseDocumentController::formAdd");
}
Funcionou perfeitamente Pbragado pela ajuda pessoal!
Pessoal, descobri um outro problema aqui.
Já vi ele em outra thread aqui porem oq foi dito lá não resolveu meu problema então vou postar aqui.
Como visto nas mensagens acima, eu consegui exibir os dados do meu controller para o meu JSP. Só que agora preciso do inverso. Baseado nos IDs que o usuário
marcar no SELECT multiple do meu JSP eu preciso que o VRaptor injete no meu metodo uma lista com os IDs selecionados, ou mesmo se possível os objetos UserAcct instanciados… isso seria possivel com o VRaptor?
Aqui está o meu JSP:
<select name="developersList[].id" id="developersList[].id" multiple="multiple" style="width: 300px">
<c:forEach var="userAccount" items="${listDevelopers}">
<option value="${userAccount.idUserAccount}">${userAccount.name}</option>
</c:forEach>
</select>
Arqui está o metodo do controller:
public void addReleaseDocument(ReleaseDocument releaseDocument, List<String> developersList){
logger.trace("Developers: " + developersList.size());
...
}
Estou usando essa versão do VR http://oss.sonatype.org/content/repositories/snaps...or-3.1.3-20100607.234700-8.jar
alguma pista?
só receber uma List chamada developersList no método (vc pode chamar do q vc quiser, de qqer forma)
Mesmo o meu UserAccount.java não sendo anotado como @Component?
sim =)
o @Component é só pra dependências… que vc recebe no construtor das classes e que precisam ser gerenciados pelo VRaptor…
para parâmetros de lógicas pode ser qqer classe… (desde que tenha um construtor padrão ou um converter)
Não funcionou Lucas.
o html gerado pelas taglibs ficou assim:
<tr>
<td valign="top" width="200">Developers</td>
<td>
<select name="developersList[].id" id="developersList[].id" multiple="multiple" style="width: 300px">
<option value="2 ">2 </option>
<option value="1 ">1 </option>
</select>
porem vejo essa exception nos logs do VRaptor:
DEBUG 2010-06-28 22:49:16,796 [WebContainer : 0] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (157) unable to parse expression 'developersList[].id'
ognl.ExpressionSyntaxException: Malformed OGNL expression: developersList[].id [ognl.ParseException: Encountered " "]" "] "" at line 1, column 16.
Was expecting one of:
":" ...
"not" ...
"+" ...
"-" ...
"~" ...
"!" ...
"(" ...
"true" ...
"false" ...
"null" ...
"#this" ...
"#root" ...
"#" ...
"[" ...
"{" ...
"@" ...
"new" ...
<IDENT> ...
<DYNAMIC_SUBSCRIPT> ...
"\'" ...
"`" ...
"\"" ...
<INT_LITERAL> ...
<FLT_LITERAL> ...
]
at ognl.Ognl.parseExpression(Ognl.java:112)
at ognl.Ognl.setValue(Ognl.java:783)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:132)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:108)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:90)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:83)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:68)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:837)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:747)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:700)
at com.ibm.ws.wswebcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:115)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:849)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:785)
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3507)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:122)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
...
DEBUG 2010-06-28 22:49:16,843 [WebContainer : 0] br.com.caelum.vraptor.http.ParanamerNameProvider: (50) Found parameter names with paranamer for ReleaseDocumentController.addReleaseDocument(ReleaseDocume
nt, List, List, List, List) as [releaseDocument, emailTo, emailCc, developersList, reviewersList]
DEBUG 2010-06-28 22:49:16,843 [WebContainer : 0] br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor: (73) Parameter values for [DefaultResourceMethod: ReleaseDocumentController.addReleas
eDocumentReleaseDocumentController.addReleaseDocument(ReleaseDocument, List, List, List, List)] are [com.ibm.releasenotes.model.ReleaseDocument@cdaa61c1, null, null, null, null]
DEBUG 2010-06-28 22:49:16,937 [WebContainer : 0] br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler: (53) Invoking interceptor ExecuteMethodInterceptor
DEBUG 2010-06-28 22:49:16,953 [WebContainer : 0] br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor: (56) Invoking ReleaseDocumentController.addReleaseDocument(ReleaseDocument, List, List, List,
List)
DEBUG 2010-06-28 22:50:09,531 [WebContainer : 0] br.com.caelum.vraptor.VRaptor: (82) VRaptor received a new request
DEBUG 2010-06-28 22:50:09,625 [WebContainer : 0] br.com.caelum.vraptor.core.DefaultRequestExecution: (57) executing stack DefaultRequestExecution
DEBUG 2010-06-28 22:50:09,687 [WebContainer : 0] br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler: (53) Invoking interceptor ResourceLookupInterceptor
DEBUG 2010-06-28 22:50:09,703 [WebContainer : 0] br.com.caelum.vraptor.http.DefaultResourceTranslator: (50) trying to access /images/content_bg_tiled.png
DEBUG 2010-06-28 22:50:09,718 [WebContainer : 0] br.com.caelum.vraptor.VRaptor: (96) VRaptor ended the request
Será que é por causa do especo colocado junto do Value no SELECT?
vc tem certeza que tá com o último snapshot do VRaptor?
vc tirou a versão antiga? o vraptor-3.1.2.jar não pode estar no WEB-INF/lib, só aquele jar do link q vc falou
realmente estava com outra lib do VRaptor. Agora deixei somente a do link (veja lista abaixo) porem estou pegando uma exception ao iniciar a aplicação:
rvalen@rvalen /cygdrive/c/workspace/ReleaseNotesSystem/WebContent/WEB-INF/lib
$ ls -la
total 17280
d---------+ 1 rvalen mkpasswd 0 2010-06-28 23:15 .
d---------+ 1 rvalen mkpasswd 0 2010-04-20 15:02 ..
----------+ 1 rvalen mkpasswd 0 2010-05-18 17:29 .jars
d---------+ 1 rvalen mkpasswd 0 2010-03-04 10:43 CVS
----------+ 1 rvalen mkpasswd 443432 2010-03-03 11:13 antlr-2.7.6.jar
----------+ 1 rvalen mkpasswd 4467 2010-03-01 09:09 aopalliance.jar
----------+ 1 rvalen mkpasswd 114916 2010-03-01 09:09 aspectjrt.jar
----------+ 1 rvalen mkpasswd 278682 2010-03-03 13:16 cglib-2.2.jar
----------+ 1 rvalen mkpasswd 324238 2010-03-01 09:09 cglib-nodep-2.1_3.jar
----------+ 1 rvalen mkpasswd 559366 2010-03-03 11:13 commons-collections-3.1.jar
----------+ 1 rvalen mkpasswd 57779 2010-03-01 09:09 commons-fileupload-1.2.1.jar
----------+ 1 rvalen mkpasswd 60841 2010-03-01 09:09 commons-logging.jar
----------+ 1 rvalen mkpasswd 585593 2010-04-16 15:26 dbunit-2.4.7.jar
----------+ 1 rvalen mkpasswd 313898 2010-03-03 11:13 dom4j-1.6.1.jar
----------+ 1 rvalen mkpasswd 313898 2010-03-03 11:52 dom4j.jar
----------+ 1 rvalen mkpasswd 50583 2010-03-03 11:52 ejb3-persistence.jar
----------+ 1 rvalen mkpasswd 577311 2010-03-01 09:09 google-collect-1.0.jar
----------+ 1 rvalen mkpasswd 279714 2010-03-03 11:52 hibernate-annotations.jar
----------+ 1 rvalen mkpasswd 66993 2010-03-03 11:52 hibernate-commons-annotations.jar
----------+ 1 rvalen mkpasswd 2266769 2010-03-03 11:52 hibernate-core.jar
----------+ 1 rvalen mkpasswd 31484 2010-03-03 11:25 hibernate-testing.jar
----------+ 1 rvalen mkpasswd 2421736 2010-03-03 11:25 hibernate3.jar
----------+ 1 rvalen mkpasswd 546698 2010-03-04 10:40 j2ee.jar
----------+ 1 rvalen mkpasswd 597476 2010-03-03 11:13 javassist-3.9.0.GA.jar
----------+ 1 rvalen mkpasswd 44600 2010-05-19 09:54 jboss-ejb3x.jar
----------+ 1 rvalen mkpasswd 5848 2010-05-21 11:42 jsr250-api.jar
----------+ 1 rvalen mkpasswd 30692 2010-03-01 09:09 jstl-api-1.2.jar
----------+ 1 rvalen mkpasswd 392434 2010-03-01 09:09 jstl-impl-1.2.jar
----------+ 1 rvalen mkpasswd 10899 2010-03-03 11:13 jta-1.1.jar
----------+ 1 rvalen mkpasswd 237047 2010-04-13 13:20 junit-4.8.1.jar
----------+ 1 rvalen mkpasswd 391834 2010-03-03 13:13 log4j-1.2.15.jar
----------+ 1 rvalen mkpasswd 74546 2010-03-01 09:09 mirror-1.5.1.jar
----------+ 1 rvalen mkpasswd 732695 2010-04-12 11:07 mysql-connector-java-5.1.12-bin.jar
----------+ 1 rvalen mkpasswd 31582 2010-03-01 09:09 objenesis-1.1.jar
----------+ 1 rvalen mkpasswd 239803 2010-03-01 09:09 ognl-2.7.3.jar
----------+ 1 rvalen mkpasswd 1555682 2010-03-03 13:22 ojdbc14.jar
----------+ 1 rvalen mkpasswd 324242 2010-03-01 09:09 org.springframework.aop-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 53081 2010-03-01 09:09 org.springframework.asm-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 30482 2010-03-01 09:09 org.springframework.aspects-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 551967 2010-03-01 09:09 org.springframework.beans-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 657492 2010-03-01 09:09 org.springframework.context-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 359338 2010-03-01 09:09 org.springframework.core-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 154200 2010-03-01 09:09 org.springframework.expression-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 359154 2010-03-01 09:09 org.springframework.web-3.0.0.RELEASE.jar
----------+ 1 rvalen mkpasswd 28415 2010-03-01 09:09 paranamer-1.5.jar
----------+ 1 rvalen mkpasswd 23445 2010-03-03 13:12 slf4j-api-1.5.8.jar
----------+ 1 rvalen mkpasswd 9679 2010-03-01 09:09 slf4j-log4j12-1.5.8.jar
----------+ 1 rvalen mkpasswd 7600 2010-03-03 13:20 slf4j-simple-1.5.11.jar
----------+ 1 rvalen mkpasswd 783749 2010-06-23 08:33 vraptor-3.1.3-20100607.234700-8.jar
----------+ 1 rvalen mkpasswd 102829 2010-03-01 10:24 wsd_client_api-0.0.1.jar
----------+ 1 rvalen mkpasswd 84185 2010-03-01 10:24 wsd_server_api-0.0.1.jar
----------+ 1 rvalen mkpasswd 431406 2010-03-01 09:09 xstream-1.3.1.jar
Exception
meProvider': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.vraptor.http.ParanamerNameProvider]: C
onstructor threw exception; nested exception is java.lang.NoClassDefFoundError: com.thoughtworks.paranamer.AnnotationParanamer
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:132)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:86)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:294)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:858)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:419)
at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.start(SpringBasedContainer.java:68)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:82)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
Acredito estar faltando algum jar?
Lucas,
Substitui o jar e deu certo. O problema é que ele tenta criar um objeto UserAccount novo então seria mais interessante eu receber um List<String> com os ids que o usuário escolheu, assim eu posso buscar os users no banco. Infelizmente ao mudar a assinatura do meu método de
1. public void addReleaseDocument(ReleaseDocument releaseDocument, List<UserAccount> developersList){
2. logger.trace("Developers: " + developersList.size());
3. ...
4. }
para
1. public void addReleaseDocument(ReleaseDocument releaseDocument, List<String> developersList){
2. logger.trace("Developers: " + developersList.size());
3. ...
4. }
eu estou recebendo essa exception aqui
DEBUG 2010-06-29 23:20:36,906 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying releaseDocument.sdTicket with []
DEBUG 2010-06-29 23:20:36,937 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying developersList[0].id with [2 ]
DEBUG 2010-06-29 23:20:36,984 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (147) cant find property for expression developersList[0].id ignoring
DEBUG 2010-06-29 23:20:37,000 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying releaseDocument.csTicket with []
DEBUG 2010-06-29 23:20:37,015 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying releaseDocument.versioningSystem with []
DEBUG 2010-06-29 23:20:37,046 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying releaseDocument.generalDescription with []
DEBUG 2010-06-29 23:20:37,125 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (130) Applying developersList[].id with [2 ]
DEBUG 2010-06-29 23:20:37,140 [WebContainer : 1] br.com.caelum.vraptor.http.ognl.OgnlParametersProvider: (157) unable to parse expression 'developersList[].id'
ognl.ExpressionSyntaxException: Malformed OGNL expression: developersList[].id [ognl.ParseException: Encountered " "]" "] "" at line 1, column 16.
Was expecting one of:
":" ...
"not" ...
"+" ...
"-" ...
"~" ...
"!" ...
"(" ...
"true" ...
"false" ...
"null" ...
"#this" ...
"#root" ...
"#" ...
"[" ...
"{" ...
"@" ...
"new" ...
<IDENT> ...
<DYNAMIC_SUBSCRIPT> ...
"\'" ...
"`" ...
"\"" ...
<INT_LITERAL> ...
<FLT_LITERAL> ...
]
at ognl.Ognl.parseExpression(Ognl.java:112)
at ognl.Ognl.setValue(Ognl.java:783)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:132)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:108)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:90)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:98)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:837)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:747)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:700)
at com.ibm.ws.wswebcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:115)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:849)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:785)
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3507)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:122)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: ognl.ParseException: Encountered " "]" "] "" at line 1, column 16.
Was expecting one of:
":" ...
"not" ...
"+" ...
"-" ...
"~" ...
"!" ...
"(" ...
"true" ...
"false" ...
"null" ...
"#this" ...
"#root" ...
"#" ...
"[" ...
"{" ...
"@" ...
"new" ...
<IDENT> ...
<DYNAMIC_SUBSCRIPT> ...
"\'" ...
"`" ...
"\"" ...
<INT_LITERAL> ...
<FLT_LITERAL> ...
at ognl.OgnlParser.generateParseException(OgnlParser.java:3172)
at ognl.OgnlParser.jj_consume_token(OgnlParser.java:3051)
at ognl.OgnlParser.unaryExpression(OgnlParser.java:1236)
at ognl.OgnlParser.multiplicativeExpression(OgnlParser.java:971)
at ognl.OgnlParser.additiveExpression(OgnlParser.java:894)
at ognl.OgnlParser.shiftExpression(OgnlParser.java:750)
at ognl.OgnlParser.relationalExpression(OgnlParser.java:508)
at ognl.OgnlParser.equalityExpression(OgnlParser.java:405)
at ognl.OgnlParser.andExpression(OgnlParser.java:352)
at ognl.OgnlParser.exclusiveOrExpression(OgnlParser.java:299)
at ognl.OgnlParser.inclusiveOrExpression(OgnlParser.java:246)
at ognl.OgnlParser.logicalAndExpression(OgnlParser.java:193)
at ognl.OgnlParser.logicalOrExpression(OgnlParser.java:140)
at ognl.OgnlParser.conditionalTestExpression(OgnlParser.java:101)
at ognl.OgnlParser.assignmentExpression(OgnlParser.java:64)
...
Meu JSP continua o mesmo… será que devo alterar algo lá?
se vc vai receber List, vc não pode navegar pelas propriedades…
developersList[].id, ele tenta popular o id do objeto que tah na lista developersList… como a lista é de String, e String não tem id, ele dá esse erro…
vc pode usar só developersList[] como nome do seu select…
no hibernate tem uma operação chamada refresh, que se a entidade estiver com o id preenchido ele puxa do banco e preenche as outras propriedades:
session.refresh(userAccount);