Re:Input ChekBox null + VRaptor 3 + Apache Tomcat [RESOLVIDO]

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