Erro ao usar um checkbox no vRaptor

9 respostas
andreluis

quando eu seleciono o checkbox ele esta um erro mostrado a sequir, o que sera que poder
ser??

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.InterceptionException: There are validation errors and you forgot to specify where to go. Please add in your method something like:

validator.onErrorUse(page()).of(AnyController.class).anyMethod();

or any view that you like.

If you didnt add any validation error, it is possible that a conversion error had happened.

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)

br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)

br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Apache Tomcat/6.0.18

9 Respostas

G

vreport? Mas que raios é isso?

De qualquer forma quanto ao erro do vraptor 'e que ocorreu um erro de validação e você náo usou o validation.onErrorUse.

andreluis

Lembrando que meus checkbox correspondem a dois atributos boolean

private Boolean emprestimo; private Boolean consulta;

Como o hibernate lida com boolean? pq eu observei que quando preencho qualquer coisa no banco, ele encherga como true, se estiver vazio false

complexo isso

obrigado

andreluis

Desculpa já arrumei o titulo na pressa confundi vraptor com ireport rsr, nesse caso não fiz validação alguma mesmo, qual seria a melhor forma de setar valor para os atributos boolean através do formulário? eu gostaria que fosse através de checkbox tem como? não sei usar validação, se nesse caso precisar mesmo, minha validação toda eu faço client inside através de jquery…

G

andreluis:
Como o hibernate lida com boolean? pq eu observei que quando preencho qualquer coisa no banco, ele encherga como true, se estiver vazio false
true é true, false é false, nulo é nulo. Se vocé esta usando a wrapper ele grava null se nada for preenchido.

andreluis

Amigo, acho que vc não está entendendo, primeiramente meu nivel de conhecimento do vraptor é bastante iniciante, a unica coisa que quero saber é porque quando eu tenho um checkbox com value=“T” Ocorre esse erro, e se essa não for a maneira correta agradeceria se podesse me ajudar…

<dl> <dt><label for="disponibilidadeAcervo.emprestimo">Emprestimo:</label></dt> <dd><input type="checkbox" value="T" name="disponibilidadeAcervo.emprestimo" id="disponibilidadeAcervo.emprestimo"/></dd> </dl> <dl> <dt><label for="disponibilidadeAcervo.consulta">Consulta:</label></dt> <dd><input type="checkbox" value="T" name="disponibilidadeAcervo.consulta" id="disponibilidadeAcervo.consulta"/></dd> </dl> <dl>

andreluis

o erro somente ocorre se eu marcar algum dos checkbox, se eu deixar sem marcar não acontece nada, grava sem problemas

G

André, entendi agora seu problema. Como você coloca o value=T, o vraptor não está sabendo como converter.

Seu campo é Boolean, e os valores possíveis para ele são TRUE, FALSE e NULL. Ou seja, o Vraptor não sabe como injetar um T no objeto, entendeu?

Você pode fazer duas coisas:
- colocar o campo para value=true, assim o vraptor injeta tudo certo
- criar um converter que diga que T = true

@Convert(Boolean.class)
@ApplicationScoped
public class PagingConverter
    implements Converter<Boolean> {

    @Override
    public Boolean convert(String value, Class<? extends Boolean> type, ResourceBundle bundle) {
        if (value == null || value.length() == 0) {
            return true;
        }

        return value.equals("T");
    }
}
Lucas_Cavalcanti

os valores true e false do vraptor são:

private static final Set<String> IS_TRUE  = new HashSet<String>(Arrays.asList("TRUE", "1", "YES", "Y", "ON"));
	private static final Set<String> IS_FALSE = new HashSet<String>(Arrays.asList("FALSE", "0", "NO", "N", "OFF"));

e só pra você ficar ciente, quando vc marca o checkbox o browser envia o parametro na requisição, com o valor que vc colocou, se vc não marca o checkbox o browser não manda nada

então na sua entidade, o hibernate vai salvar como null, não como false

andreluis

AGORA ESTA FUNCIONANDO
MUITO OBRIDADO…
A TODOS POR ME AJUDAR…
VALEW… :lol:

Criado 18 de junho de 2010
Ultima resposta 18 de jun. de 2010
Respostas 9
Participantes 3