Converter String para Integer implicito no JSF 2.0

6 respostas
W

Bom dia pessoal,
estou com uma dúvida no jsf 1.2 eu usava um atributo Integer na minha classe e ligava a um campo normal no jsf,
quando fazia alguma ação ele implicitamente ja era convertido de String(pagina) para Integer(atributo da minha classe),
agora no JSF 2.0 ocorre um erro de mismatch java.lang.IllegalArgumentException: argument type mismatch,
No JSF 2.0 eu sou obrigado a colocar explicito um conversor para meus campos Integer?

6 Respostas

R

não, ele continua convertendo implicitamente.
posta teu código ai para podermos ver e entender melhor esse erro.

W
Ta mesmo o problema é quando uso meu componente:
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html">
    <!-- INTERFACE -->
    <cc:interface>
        <cc:attribute name="valor" required="true" />
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
	    <h:inputText value="#{cc.attrs.valor}" />	   
    </cc:implementation>
</html>
na minha pagina ta assim:
<util:teste id="codigoCursoMensalidade" valor="#{contasFace.conta.codigoCursoMensalidade}"/>

onde esse codigoCurso é do tipo integer

ai quando tento realizar alguma ação ele me gera esse erro

javax.faces.component.UpdateModelException: javax.el.ELException: /resources/ezcomp/teste.xhtml @13,47 value="#{cc.attrs.valor}": /receber/contas.xhtml @40,121 valor="#{contasFace.conta.codigoCursoMensalidade}": java.lang.IllegalArgumentException: argument type mismatch
	at javax.faces.component.UIInput.updateModel(UIInput.java:853)
	at javax.faces.component.UIInput.processUpdates(UIInput.java:735)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1113)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1113)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1113)
	at org.richfaces.component.AbstractTogglePanel.processUpdates(AbstractTogglePanel.java:310)
	at javax.faces.component.UIForm.processUpdates(UIForm.java:272)
	at org.richfaces.context.PartialViewExecuteVisitCallback.visit(PartialViewExecuteVisitCallback.java:59)
	at org.richfaces.context.BaseExtendedVisitContext.invokeVisitCallback(BaseExtendedVisitContext.java:337)
	at javax.faces.component.UIForm.visitTree(UIForm.java:345)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1496)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1496)
	at org.richfaces.context.ExtendedPartialViewContextImpl.executeComponents(ExtendedPartialViewContextImpl.java:249)
	at org.richfaces.context.ExtendedPartialViewContextImpl.processPartialExecutePhase(ExtendedPartialViewContextImpl.java:229)
	at org.richfaces.context.ExtendedPartialViewContextImpl.processPartial(ExtendedPartialViewContextImpl.java:208)
	at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1222)
	at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	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.Http11AprProcessor.process(Http11AprProcessor.java:861)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
	at java.lang.Thread.run(Thread.java:619)
Caused by: javax.el.ELException: /resources/ezcomp/teste.xhtml @13,47 value="#{cc.attrs.valor}": /receber/contas.xhtml @40,121 valor="#{contasFace.conta.codigoCursoMensalidade}": java.lang.IllegalArgumentException: argument type mismatch
	at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:139)
	at javax.faces.component.UIInput.updateModel(UIInput.java:818)
	... 31 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
	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 javax.el.BeanELResolver.setValue(BeanELResolver.java:108)
	at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
	at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
	at org.jboss.el.parser.AstPropertySuffix.setValue(AstPropertySuffix.java:73)
	at org.jboss.el.parser.AstValue.setValue(AstValue.java:84)
	at org.jboss.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
	at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
	at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.put(CompositeComponentAttributesELResolver.java:365)
	at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.put(CompositeComponentAttributesELResolver.java:287)
	at javax.el.MapELResolver.setValue(MapELResolver.java:90)
	at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
	at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
	at org.jboss.el.parser.AstPropertySuffix.setValue(AstPropertySuffix.java:73)
	at org.jboss.el.parser.AstValue.setValue(AstValue.java:84)
	at org.jboss.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
	at com.sun.faces.facelets.el.ContextualCompositeValueExpression.setValue(ContextualCompositeValueExpression.java:170)
	at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
	... 32 more

tem alguma coisa q eu possa fazer para corrigir esse problema?

R

cara, acho que o problema é que quando vc usa cc:attribute, tudo o que vc coloca dentro dessa tag é interpretado com string e não é convertido implicitamente. acho que nesse caso vc terá que fazer uma conversão explicita mesmo, no momento em que vc recupera esse valor de cc:attribute.

W

nem se eu colocar alguma coisa como type de object ou method-signature de alguma coisa da certo?
tipo

<cc:attribute name="valor" required="true" type="java.lang.Object" />
R

tenta colocar então o tipo Integer. se não der certo acho que tem que fazer a conversão mesmo.

W

É tbm não deu certo aqui, vou tentar achar alguma outra solução então, se não conseguir só com o converter mesmo ne.
Valeu.

Criado 12 de abril de 2011
Ultima resposta 12 de abr. de 2011
Respostas 6
Participantes 2