Olá galera como vão ?
bom meu problema é o seguinte eu criei uma jsp e um modelo para fazer o controle de permissoes por usuario
na minha jsp que recebe quais telas cada funcionario tem acesso eu tenho uma lista de checkboxes que deveriam retornar quais telas estão disponiveis para o meu controller
porém essas checkboxes estão retornando valor null estou anexando o codigo da minha jsp e do meu controller
formulario.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Editar Permissões</title>
</head>
<body>
<form action="<c:url value="/permissao/${analista.id }"/>" method="post">
<fieldset>
<legend>Editar permissões para o usuário - ${analista.nome_analista }</legend>
<c:forEach items="${funcionalidadeList}" var="funcionalidades">
<input type="checkbox" name="permissoes" value="${funcionalidades.id}"/> ${funcionalidades.nome_tela } <br/>
</c:forEach>
<button type="submit">Enviar</button>
</fieldset>
</form>
</body>
</html>
PermissaoController.class
package br.com.webcommerce.controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.webcommerce.dao.AnalistaDao;
import br.com.webcommerce.dao.FuncionalidadeDao;
import br.com.webcommerce.dao.PermissaoDao;
import br.com.webcommerce.model.Analista;
import br.com.webcommerce.model.Funcionalidade;
import br.com.webcommerce.model.Permissao;
@Resource
public class PermissaoController {
private Result result;
private PermissaoDao perDao;
private FuncionalidadeDao funDao;
private AnalistaDao anaDao;
public PermissaoController(FuncionalidadeDao funDao, PermissaoDao perDao, Result result, AnalistaDao anaDao) {
this.result = result;
this.perDao = perDao;
this.funDao = funDao;
this.anaDao = anaDao;
}
@Get @Path(value="/permissao/{id}")
public void formulario(long id){
result.include("analista", anaDao.getById(id));
result.include("funcionalidadeList", funDao.getAll());
}
@Post @Path(value="/permissao/{id}")
public void teste(long id, String ...permissoes){
System.out.println(permissoes);
}
}
a variavel array de string permissoes no metodo teste vem nulo da minha view, não consigo imaginar o meu problema
estou usando Apache Tomcat 6.0 com VRaptor 3.1.2 e estou usando o SiteMesh
se alguem não entendeu é so avisar que eu tento explicar melhor
muito obrigado pela ajuda, abraços.
Acabo de descobrir que se tenho 3 itens na minha lista
e seleciono somente 1 ele retorna null, se seleciono 2 itens da lista ele retorna o array com duas posições…
[quote=Tenkara Kiddo]Acabo de descobrir que se tenho 3 itens na minha lista
e seleciono somente 1 ele retorna null, se seleciono 2 itens da lista ele retorna o array com duas posições…[/quote]
Consegui finalizar o problema coloquei uma pequena POG que funcionou igual magica
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Editar Permissões</title>
</head>
<body>
<form action="<c:url value="/permissao/${analista.id }"/>" method="post">
<fieldset>
<legend>Editar permissões para o usuário - ${analista.nome_analista }</legend>
<c:forEach items="${funcionalidadeList}" var="funcionalidades">
<input type="checkbox" name="permissoes" value="${funcionalidades.id}"/> ${funcionalidades.nome_tela } <br/>
</c:forEach>
<input type="hidden" name="permissoes" value="0"/>
<button type="submit">Enviar</button>
</fieldset>
</form>
</body>
</html>
na linha 18 coloquei um input hidden com um valor qualquer (que eu tenho certeza que nao vai afetar minha app) com o mesmo nome do input de checkbox
então o vraptor recebeu um array de string com duas posições
obrigado a todos
atualize para a última versão do VRaptor, que esse bug foi corrigido.
o que vai acontecer é que se vc não selecionar nenhuma checkbox, o permissões vai vir nulo.
obrigado Lucas,
na nova versão o array de string virá como vazio somente? ao inves de nulo (caso vazio)
não, pq o VRaptor não tem como saber…
se vc não marca nenhum checkbox simplesmente não vem nenhum parâmetro “permissoes” no request. E ele entende isso como null.
ah legal Lucas, entendi direitinho brigadão
abraços.
Salve, salve turma!
Estava usando o VRaptor3 (3.1.3) e o maven2 (apenas para gerenciar as dependências do projeto) e encontrei o mesmo problema.
No meu POM, atualizei o VRaptor para versão 3.2.0, mas o problema persiste. o0’
Devo alterar alguma outra biblioteca?
como vc está nomeando o seu checkbox?
coisa
coisa[]
ou
coisa[0], coisa[1], etc?
os dois últimos funcionam, se possível use o último
Olá Lucas,
Valeu pela resposta!
Eu estava usando apenas “coisas” para o name dos checkbox.
Alterei o name para coisas[index] e o html ficou assim:[code]
MatchMaker
Google
Google Images
Bing
Yahoo
[/code]Ao postar, recebo a exception: [code]27/12/2010 14:26:36 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.VRaptorException: Unable to find converter for java.lang.String
at br.com.caelum.vraptor.core.DefaultConverters.to(DefaultConverters.java:57)
at br.com.caelum.vraptor.http.ognl.VRaptorConvertersAdapter.convert(VRaptorConvertersAdapter.java:62)
at br.com.caelum.vraptor.http.ognl.VRaptorConvertersAdapter.convertValue(VRaptorConvertersAdapter.java:58)
at ognl.ArrayPropertyAccessor.setProperty(ArrayPropertyAccessor.java:112)
at br.com.caelum.vraptor.http.ognl.ArrayAccessor.setProperty(ArrayAccessor.java:78)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.Ognl.setValue(Ognl.java:737)
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:104)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
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 com.b2bmatchfinder.util.SessionLoaderInterceptor.intercept(SessionLoaderInterceptor.java:33)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at com.b2bmatchfinder.site.util.ClassificationInterceptor.intercept(ClassificationInterceptor.java:59)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at com.b2bmatchfinder.site.util.SiteAuthorizationInterceptor.intercept(SiteAuthorizationInterceptor.java:85)
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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)[/code]
Acho que o problema é causado pq value do meu checkbox é uma String, certo?
vc tá recebendo uma String[]? tenta trocar pra List.
ou tenta criar uma enum com essas strings e receber a enum como parâmetro (lista ou array)
CARALEO Lucas!
Só mudei para minha enum (já existia uma) e funfou lindio! ^^
SENSACIONAL!
\o/
Muito obrigado!
PS: VRaptor rulz! ;D