JSF - <f:selectItem não valida - Erro iniciante

11 respostas
SadNess

galera
to aprendendo jsf, e to tentando simplesmente chamar um método através de ajax
tenho somente um <h:selectOneMenu> na pagina, só que quando eu coloco um <f:selectItem /> ele não chama o método btAvancar()

segue o codigo…

jsp:

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %&gt;
&lt;%@ taglib uri="http://richfaces.org/rich" prefix="rich" %&gt;
&lt;%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %&gt;
&lt;%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt"&gt;

&lt;body&gt;
&lt;f:view&gt;
	&lt;a4j:form id="consulta-form" &gt;

		&lt;t:selectOneMenu id="carteiras" value="#{testeMBean.carteiraSelecionada}" converter="javax.faces.BigInteger" &gt;
			&lt;f:selectItem itemValue="0" itemLabel="- - Selecione - -" /&gt;
		&lt;/t:selectOneMenu&gt;
	
		&lt;h:commandButton value="Avancar" action="#{testeMBean.btAvancar}" /&gt;
		
	&lt;/a4j:form&gt;

&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;

Managed-Bean:

public class TesteMBean {
	
	private BigInteger carteiraSelecionada;

	public BigInteger getCarteiraSelecionada() {
		return carteiraSelecionada;
	}

	public void setCarteiraSelecionada(BigInteger carteiraSelecionada) {
		this.carteiraSelecionada = carteiraSelecionada;
	}
	
	public String btAvancar()	{
		System.out.println("ok!");
		
		return null;

E o MB declarado no faces-config:

&lt;managed-bean&gt;
 	&lt;managed-bean-name&gt;testeMBean&lt;/managed-bean-name&gt;
 	&lt;managed-bean-class&gt;br.com.vivo.vivo360.ui.mb.consulta.TesteMBean&lt;/managed-bean-class&gt;
 	&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
 &lt;/managed-bean&gt;

quando eu clico no botao Avancar, ele não chama o método correspondente no MB
mas se eu simplesmente retiro a linha

&lt;f:selectItem itemValue="0" itemLabel="- - Selecione - -" /&gt;

aí ele chama o método normalmente…
é algum problema de validação??
alguém sabe como corrigir?

11 Respostas

mateusprado

o scope do seu mb no faces-config altera pra session.

SadNess

mudei pra session mas continua não funcionando =[

SadNess

bom
dei uma pesquisada na net e pelo que entendi o problema está em converter o valor selecionado no combo para um BigInteger, que é o tipo da propriedade no ManagedBean

só que por mais simples que pareça ser fazer isso, não to conseguindo descobrir como

existe algum conversor para BigInteger que já venha com o JSF? ou eu vou ter que criar um na mão?

victorpsl

Você já não está usando o conversor lá no <t:selectOneMenu… converter=“javax.faces.BigInteger” > ?

SadNess

sim
mas não está funcionado =[
não sei se estou fazendo algo errado

victorpsl

Então creio eu q seja o seguinte!!

  • No seu button vc está chamando seu método por meio de um action…
    use um actionListener…
    e no seu metodobean , coloca ele como um ActionEvent event…

se eu n me engano acho q pode ser isso!!

vê ai e me fla se funciona… :stuck_out_tongue:

SadNess

cara

não deu certo não =[

continua na mesma… ele fala que o valor não é válido

rponte

Eu não conhecia o converter para BigInteger, enfim, talvez por nunca ter precisado :slight_smile:
Bem, tenta algo como:

&lt;f:selectItem itemValue="#{0}" itemLabel="- - Selecione - -" /&gt;

Abraços e boa sorte!

SadNess

bah cara
eu podia jurar que isso ia funcionar, mas não funcionou =[

recebo uma exceção logo que carrego a página

ype Exception report

message

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

exception

org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Long
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)

root cause

javax.faces.convert.ConverterException: java.lang.ClassCastException: java.lang.Long
	javax.faces.convert.BigIntegerConverter.getAsString(BigIntegerConverter.java:112)
	org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:521)
	org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:532)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderSelectOptions(HtmlRendererUtils.java:410)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:315)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:267)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:59)
	org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer.encodeEnd(HtmlMenuRenderer.java:60)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:740)
	javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:645)
	javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:568)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_t_005fselectOneMenu_005f0(converter_jsp.java:193)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_a4j_005fform_005f0(converter_jsp.java:155)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_f_005fview_005f0(converter_jsp.java:115)
	org.apache.jsp.jsp.converter_jsp._jspService(converter_jsp.java:78)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)

root cause

java.lang.ClassCastException: java.lang.Long
	javax.faces.convert.BigIntegerConverter.getAsString(BigIntegerConverter.java:110)
	org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:521)
	org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:532)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderSelectOptions(HtmlRendererUtils.java:410)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:315)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:267)
	org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:59)
	org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer.encodeEnd(HtmlMenuRenderer.java:60)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:740)
	javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:645)
	javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:568)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_t_005fselectOneMenu_005f0(converter_jsp.java:193)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_a4j_005fform_005f0(converter_jsp.java:155)
	org.apache.jsp.jsp.converter_jsp._jspx_meth_f_005fview_005f0(converter_jsp.java:115)
	org.apache.jsp.jsp.converter_jsp._jspService(converter_jsp.java:78)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
rponte

Bem, eu nunca utilizei o BigInteger, porém já trabalhei com BigDecimal e funcionou perfeitamente. Dá um olhada aqui e vê se ajuda,
http://www.ibm.com/developerworks/library/j-jsf3/

Abraços e boa sorte.

carolino

Sei que o post é antigo… mas la vai minha dúvida.

E no caso de Long, como ficaria o conversor? to quebrando a cabeça com isso

Alguem tem alguma idéia?

Vlw pessoal!

Criado 25 de junho de 2008
Ultima resposta 3 de jul. de 2012
Respostas 11
Participantes 5