Erro quando uso o componente selectOneMenu

6 respostas
cloudx

ola galera,

estou recebendo uma mensagem que não consequi entender
eu tenho essa pagina:

<%@ page contentType=“text/html; charset=Cp1252” %>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://myfaces.apache.org/tomahawk” prefix=“t” %>

<h:outputText value="Marcar Consulta"/>
					
					<h:panelGrid columns="3" id="panel">
						
						<h:outputText value="Data:"/>
						<t:inputDate id="data" popupCalendar="true" required="true" />
						<h:message for="data"></h:message>
						
						<h:outputText value="Horário:"/>
						<t:inputDate id="hora"required="true" type="short_time"></t:inputDate>
						<h:message for="hora"></h:message>
						
						<h:outputText value="Nome do Cliente:"/>
						<h:selectOneMenu id="cliente">
							<f:selectItems value="#{clienteManager.selectClientes}" id="medicoList" />
						</h:selectOneMenu>
						<br>
						
						<h:outputText value="Nome do Medico:" />
						<h:selectOneMenu required="true" id="medico">
							<f:selectItems value="#{medicoManager.selectMedicos}" id="medicoList"/>
						</h:selectOneMenu>
						<br>
						
						<h:outputText value="Telefone :"/>
						<h:inputText maxlength="10" size="11" required="true" id="telefone"/>
						<h:message for="telefone"></h:message>
						
						<h:outputText value="Contactar?"/>
						<h:selectBooleanCheckbox id="contato"/>
					</h:panelGrid>
					
					<h:commandButton value="Marcar" />
					<h:commandButton value="Limpar" type="reset" />
				</h:form>
			</div>
		</div>
	</f:view>
</body>

quando abro eu recebo um erro:

SEVERE: Servlet.service() for servlet Faces Servlet threw exception

java.lang.IllegalArgumentException: Value is no String (class=java.lang.Integer, value=1) and component form:clientewith path: {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /marcarConsulta.jsp][Class: javax.faces.component.html.HtmlForm,Id: form][Class: javax.faces.component.html.HtmlPanelGrid,Id: panel][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: cliente]} does not have a Converter

at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:513)

at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:532)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderSelectOptions(HtmlRendererUtils.java:410)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:315)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:267)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:59)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)

at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:419)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:229)

at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:101)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)

at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:498)

at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:366)

at org.apache.myfaces.shared_impl.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:57)

at org.apache.jsp.marcarConsulta_jsp._jspx_meth_h_005fpanelGrid_005f0(marcarConsulta_jsp.java:328)

at org.apache.jsp.marcarConsulta_jsp._jspx_meth_h_005fform_005f0(marcarConsulta_jsp.java:189)

at org.apache.jsp.marcarConsulta_jsp._jspx_meth_f_005fview_005f0(marcarConsulta_jsp.java:147)

at org.apache.jsp.marcarConsulta_jsp._jspService(marcarConsulta_jsp.java:109)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)

at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)

at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)

at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)

at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)

at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)

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:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

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:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Thread.java:619)

alquem sabe qual é o problema?

6 Respostas

bueno

o seu f:selectItems está incompleto

faltanto :

<h:selectOneMenu id="cliente"> <f:selectItems value="#{clienteManager.selectClientes}" id="medicoList" /> </h:selectOneMenu>

completo :

<h:selectOneMenu id="cliente"> <f:selectItems value="#{clienteManager.selectClientes}" id="medicoList" var="client" itemLabel="#{client.description}" itemValue="#{client.id}"/> </h:selectOneMenu>

garanta que o seu cliente.getId() seta integer, assim fica tudo resolvido

cloudx

mas clienteManager.selectClientes já retorna um array de de objetos SelectItem
veja so o ClienteManager:

public class ClienteManager {

private SelectItem[] selectClientes = new SelectItem[0];
private List clientes;

public SelectItem[] getSelectClientes(){
		
		try{
			clientes = clienteDao.listarTodos();
			selectClientes = new SelectItem[clientes.size()];
		
			Cliente c;
			for(int i = 0; i < clientes.size(); i++)
			{
				c = (Cliente) clientes.get(i);
				selectClientes[i] = new SelectItem(c.getCodigo(), c.getNome());
			}
		} 
		catch(Exception e){
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Houve um erro ao tentar listar os clientes"));
			e.printStackTrace();
		}
		
		return selectClientes;
	}

}

???

bueno

se sua intenção é preencher via selectedItem recomento usar o UISelectedItem, mas para usar o selectedItem vc precisa fazer isso via binding no selectOneMenu … (não vale a pena)

porem realmente é muito mais facil vc preencher um arraylist com um valueObject (que contem as informações que vc precisa mostrar) e usar o código abaixo, muito mais simples

<h:selectOneMenu id="cliente"> <f:selectItems value="#{clienteManager.selectClientes}" id="medicoList" var="client" itemLabel="#{client.description}" itemValue="#{client.id}"/> </h:selectOneMenu>

S

Oi, estou com o mesmo problema, mas eu tenho algo de estranho a mais!

Roda no Netbeans 5.5 (windows xp), mas quando publico no servidor (debian) não roda no Apache-Tomcat.

As versões do tomcat (5.5.17) são as mesmas nas duas maquinas. Alguma idéia?

C

Certifique como está sendo preenchido o SelectItem no managed bean com os parâmetros corretos:

public List getListaResultado(){

seuList.add(new SelectItem(1,“nome_da_string”));

return seuList;

}

<h:selectOneMenu
id=“xpto”
value="#{seuBean.nomePropriedade}">
<f:selectItem itemValue="" />
<f:selectItems value="#{seuBean.listaResultado}" />
</h:selectOneMenu>

S

Obrigado pela resposta cristiano!

Esta parecido com o que voce colocou, creio que se estivesse errado não iria funcionar nem no netbeans nem no apache-tomcat rodando no debian. No netbeans (win.xp) funciona perfeitamente, os itens aparecem na combo box, não preciso fazer converter nem nada de especial. Já no debian, eu recebo a mesma exception mostrada no primeiro post.

private void loadUsuarioUnidades(){ this.listUnidades = new ArrayList<SelectItem>(); for(SisUsuarioUnidade sisUsuarioUnidade : getUsuario().getUnidades()){ setUnidade(sisUsuarioUnidade.getUnidade()); getListUnidades().add(new SelectItem(getUnidade().getSeqUnidade().getValue(), getUnidade().getDesUnidade().getValue())); } if(getListUnidades().size() > 0){ sortUnidades(); } }

Onde getUnidade().getSeqUnidade().getValue() retorna um Integer e getUnidade().getDesUnidade().getValue() retorna uma String. No JSP esta assim:

<sh:selectOneMenu cols="2" label="#{msgs.UnidadeLabel}" value="#{basewebAcessoLogin.unidade.seqUnidade.value}" disabled="#{basewebAcessoLogin.notLogged}" > <sf:selectItems value="#{basewebAcessoLogin.listUnidades}" /> </sh:selectOneMenu>

Também instalei o Tomcat 5.5.26 na minha maquina (win.xp) e tudo funcionou perfeitamente, versao 5.5.26 no debian também nao funcionou. Só no debian que não funciona nada.

Talvez vale lembrar que meus JSPs não estão em uma pasta WEB normal, eles estao em “Web pages” em formato de packages. Não sei ao certo se precisa disto, mas recentemente o projeto (que esta grande) foi quebrado em modulos menores e foi depois disso que parou de funcionar no debian, antes (quando era um projetão) funcionava perfeitamente igual no win.xp.

EDIT: Também testei com o tomcat 6.0.16, mesmo resultado, windows funciona e no debian não.

Criado 3 de julho de 2008
Ultima resposta 9 de jul. de 2008
Respostas 6
Participantes 4