Problema com SelectOneMenu

5 respostas
CrazyFrogJava

Boa Noite Senhores

estou desenvolvendo um trabalho pra faculdade e to com um problema para popular meu combo… já procurei a respeito em alguns foruns aqui mais o que achei mais semelhante com meu erro os caras que estavam respondendo fizeram um chat pra trocar msn e outras coisas assim e nada de resolver o problema…

entao vamos lá

esse é o erro que me apareceu

<blockquote>WARNING: "JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn’t provide a method with signature ‘public void flushContentToWrappedResponse()’.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.

16/09/2008 21:13:40 org.apache.myfaces.renderkit.html.HtmlLabelRenderer encodeBegin

WARNING: Attribute for of label component with id j_id_jsp_1294701059_1:menu:j_id_jsp_974445663_1pc2 is not defined

16/09/2008 21:13:40 org.apache.myfaces.renderkit.html.HtmlLabelRenderer encodeBegin

WARNING: Attribute for of label component with id j_id_jsp_1294701059_1:j_id_jsp_1294701059_6 is not defined

16/09/2008 21:13:40 com.sun.faces.lifecycle.Phase doPhase

SEVERE: JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /pages/itemfornecedor/incluirItemFornecedor.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@11fcdde]

16/09/2008 21:13:40 org.apache.catalina.core.StandardWrapperValve invoke

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

java.lang.IllegalArgumentException: Value binding '#{itemfornecedor.fornecedores}'of UISelectItems with component-path {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /pages/itemfornecedor/incluirItemFornecedor.jsp][Class: javax.faces.component.html.HtmlForm,Id: j_id_jsp_1294701059_1][Class: org.richfaces.component.html.HtmlPanel,Id: j_id_jsp_1294701059_2][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id_jsp_1294701059_5][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: comboFornecedor][Class: javax.faces.component.UISelectItems,Id: j_id_jsp_1294701059_9]} does not reference an Object of type SelectItem, SelectItem[], Collection or Map but of type : null

at org.apache.myfaces.shared_impl.util.SelectItemsIterator.hasNext(SelectItemsIterator.java:145)

at org.apache.myfaces.shared_impl.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:550)

at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:526)

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

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

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

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

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

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

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

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

at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286)

at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)

at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)

at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)

at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:832)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)

at org.apache.myfaces.application.jsp.JspViewHandlerImpl.actuallyRenderView(JspViewHandlerImpl.java:423)

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

at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)

at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

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

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

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

at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:147)

at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:256)

at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:362)

at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488)

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(Unknown Source)

</blockquote>

BACKING

public void carregarCombos() {
		ProdutoDAO prodDAO = new ProdutoDAO();
		List<Produto> listaProdutos = prodDAO.buscar();

		produtos = new ArrayList<SelectItem>();
		for (Produto prod : listaProdutos) {
			SelectItem item = new SelectItem(prod.getIdProduto(), prod
					.getDescricao());
			produtos.add(item);
		}

		FornecedorDAO fornecDAO = new FornecedorDAO();
		List<Fornecedor> listaFornecedores = fornecDAO.buscar();

		fornecedores = new ArrayList<SelectItem>();
		for (Fornecedor fornec : listaFornecedores) {
			SelectItem item = new SelectItem(fornec.getId(), fornec
					.getNomeFantasia());
			fornecedores.add(item);
		}
	}

public String gravar() {
		try {

			ItemFornecedor itemFornecedor = new ItemFornecedor();
			
			
			
			this.valorTotal = quantidade
					* itemFornecedor.getProduto().getValorUnitario();

			itemFornecedor.setQuantidade(quantidade);
			itemFornecedor.setValorTotal(valorTotal);

			ProdutoDAO prodDAO = new ProdutoDAO();
			Produto produto = prodDAO.buscar(idProduto);
			itemFornecedor.setProduto(produto);

			FornecedorDAO fornecDAO = new FornecedorDAO();
			Fornecedor fornecedor = fornecDAO.buscar(idFornecedor);
			itemFornecedor.setFornecedor(fornecedor);

			ItemFornecedorDAO bd = new ItemFornecedorDAO();
			bd.gravar(itemFornecedor);

			resetar();
			carregarCombos();

			JSFUtil.addGlobalMessage("Item Fornecedor gravado com sucesso!");
			return JSFUtil.SUCESSO;

		} catch (Exception erro) {
			System.out.println(erro);
			erro.printStackTrace();
			JSFUtil.addErrorMessage("Ocorreu um erro durante a gravação!");
			return JSFUtil.FALHA;
		}

	}

	public String excluir() {
		try {
			ItemFornecedorDAO bd = new ItemFornecedorDAO();
			ItemFornecedor itemFornecedor = bd.buscar(idItemFornecedor);
			bd.excluir(itemFornecedor);
			resetar();

			JSFUtil.addGlobalMessage("Item Fornecedor excluído com sucesso!");
			return JSFUtil.SUCESSO;

		} catch (Exception e) {
			JSFUtil.addGlobalMessage("Ocorreu um erro durante a exclusão!");
			return JSFUtil.FALHA;
		}
	}

	public String editar() {
		try {
			ItemFornecedorDAO bd = new ItemFornecedorDAO();
			
			ItemFornecedor itemFornecedor = bd.buscar(idItemFornecedor);

			itemFornecedor.setQuantidade(quantidade);
			itemFornecedor.setValorTotal(valorTotal);

			ProdutoDAO prodDAO = new ProdutoDAO();
			Produto produto = prodDAO.buscar(idProduto);
			itemFornecedor.setProduto(produto);

			FornecedorDAO fornecDAO = new FornecedorDAO();
			Fornecedor fornecedor = fornecDAO.buscar(idFornecedor);
			itemFornecedor.setFornecedor(fornecedor);

			bd.editar(itemFornecedor);

			resetar();
			carregarCombos();
			
			JSFUtil.addGlobalMessage("Item Fornecedor editado com sucesso!");
			return JSFUtil.SUCESSO;
		} catch (Exception e) {
			JSFUtil.addGlobalMessage("Ocorreu um erro durante a edição!");
			return JSFUtil.FALHA;
		}

	}

	public String buscar() {
		try {
			ItemFornecedorDAO dao = new ItemFornecedorDAO();

			if (campoPesquisa == null || campoPesquisa.trim().equals(""))
				itemFornecedores = dao.buscar();
			else
				itemFornecedores = dao.buscar(campoPesquisa.toUpperCase());

			return JSFUtil.SUCESSO;
		} catch (Exception excecao) {
			JSFUtil.addErrorMessage("Ocorreu um erro durante a busca!");
			return JSFUtil.FALHA;
		}
	}

	public String cancelar() {
		resetar();
		return JSFUtil.FALHA;
	}

	public String irIncluir() {
		resetar();
		return JSFUtil.ITEMFORNECEDOR;
	}

	public String irBuscar() {
		resetar();
		return JSFUtil.BUSCAR;
	}

	public String irExcluir() {
		try {
			String id = JSFUtil.getParam("idItemFornecedor");
			Long idItem = new Long(id);

						
			ItemFornecedorDAO bd = new ItemFornecedorDAO();

			ItemFornecedor itemFornec = bd.buscar(idItem);

			idItemFornecedor = itemFornec.getIdItemFornecedor();
			quantidade = itemFornec.getQuantidade();
			valorTotal = itemFornec.getValorTotal();
			idFornecedor = itemFornec.getFornecedor().getId();
			idProduto = itemFornec.getProduto().getIdProduto();

			carregarCombos();

			return JSFUtil.EXCLUIR;

		} catch (Exception excecao) {
			excecao.printStackTrace();
			return JSFUtil.FALHA;
		}
	}

	public String irEditar() {
		try {
			String id = JSFUtil.getParam("idItemFornecedor");
			Long idItem = new Long(id);

			ItemFornecedorDAO bd = new ItemFornecedorDAO();
			
			
			
			ItemFornecedor itemFornec = bd.buscar(idItem);

			idItemFornecedor = itemFornec.getIdItemFornecedor();
			quantidade = itemFornec.getQuantidade();
			valorTotal = itemFornec.getValorTotal();
			idFornecedor = itemFornec.getFornecedor().getId();
			idProduto = itemFornec.getProduto().getIdProduto();

			carregarCombos();

			return JSFUtil.EDITAR;
		} catch (Exception excecao) {
			excecao.printStackTrace();
			return JSFUtil.FALHA;
		}
	}
}

E MEU JSP ESTÁ ASSIM

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<!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>SISCOV - Sistema de Controle de Vendas</title>
</head>
<body>
<f:view>
	<h:form>
	<div class="tabela1">
		<jsp:include page="/pages/menu/menuInc.jsp"></jsp:include>
		
		<rich:panel header="Cadastros - Item Fornecedor">
			<h:panelGrid columns="1">
				<h:messages></h:messages>
			</h:panelGrid>
			<h:panelGrid columns="2">
				
				<h:outputLabel value="Fornecedor:"></h:outputLabel>
				<h:selectOneMenu id="comboFornecedor" value="#{itemfornecedor.idFornecedor}" >
					<f:selectItem itemValue="0" itemLabel="Escolha um fornecedor" />
					<f:selectItems value="#{itemfornecedor.fornecedores}" />
				</h:selectOneMenu>
				
				<h:outputLabel value="Produto:"></h:outputLabel>
				<h:selectOneMenu id="comboProduto" value="#{itemfornecedor.idProduto}">
					<f:selectItem itemValue="0" itemLabel="Escolha um produto" />
					<f:selectItems value="#{itemfornecedor.produtos}" />
				</h:selectOneMenu>
				
				<h:outputLabel value="Quantidade:"></h:outputLabel>
				<h:inputText value="#{itemfornecedor.quantidade}"></h:inputText>
				
				<h:outputLabel value="Valor Total:"></h:outputLabel>
				<h:inputText value="#{itemfornecedor.valorTotal}" disabled="true" label="#{itemfornecedor.valorTotal}"></h:inputText>
				
				<h:commandButton value="Gravar" type="submit"
					action="#{itemfornecedor.gravar}"></h:commandButton>
				<h:commandButton value="Buscar" type="submit"
					action="#{itemfornecedor.irBuscar}"></h:commandButton>
			</h:panelGrid>
		</rich:panel></div>
	</h:form>
</f:view>
</body>
</html>

ja fiquei a noite inteira tentando ver o que esta acontecendo de errado e acho que to tào bitolado que pode ser uma coisa simples que nao to enxergando

se puderem me ajudar

obrigado

Abraços
André

5 Respostas

anderson.bonavides
private ArrayList<SelectItem> fornecedores;

       gets e setrs       

       public  SelectItem<SelectItem> carregarCombos() {
                fornecedores = new ArrayList<SelectItem>();

		ProdutoDAO prodDAO = new ProdutoDAO();
		List<Produto> listaProdutos = prodDAO.buscar();

		produtos = new ArrayList<SelectItem>();
		for (Produto prod : listaProdutos) {
			SelectItem item = new SelectItem(prod.getIdProduto(), prod
					.getDescricao());
			produtos.add(item);
		}

		FornecedorDAO fornecDAO = new FornecedorDAO();
		List<Fornecedor> listaFornecedores = fornecDAO.buscar();

		fornecedores = new ArrayList<SelectItem>();
		for (Fornecedor fornec : listaFornecedores) {
			SelectItem item = new SelectItem(fornec.getId(), fornec
					.getNomeFantasia());
			fornecedores.add(item);
		}
            return fornecedores;
	}
CrazyFrogJava

Boa Noite meu caro Anderson…

está sugestao que voce me passou nao deu certo…infelizmente… ve se entendi as modificacoes que voce fez

ao inves de void retorna um SelectItem e retornar meu List nao deu muito certo nao

se nao for isso me fala qual foram as modificacoes

mesmo assim obrigado pela ajuda por enquanto

anderson.bonavides

A varíavel tem que ser um SelecItem e o método tem que retornar a lista, ou seja, void não retorna nada.

Ficou faltando uma modificação:

private ArrayList<SelectItem> fornecedores;

private ArrayList<SelectItem> produtos;

       gets e setrs       

       public  SelectItem<SelectItem> getCarregarFornecedores {
              
		FornecedorDAO fornecDAO = new FornecedorDAO();
		List<Fornecedor> listaFornecedores = fornecDAO.buscar();

		fornecedores = new ArrayList<SelectItem>();
		for (Fornecedor fornec : listaFornecedores) {
			SelectItem item = new SelectItem(fornec.getId(), fornec
					.getNomeFantasia());
			fornecedores.add(item);
		}
            return fornecedores;
	}

   public  SelectItem<SelectItem> getCarregarProdutos {
              
		ProdutoDAO prodDAO = new ProdutoDAO();
		List<Produto> listaProdutos = prodDAO.buscar();

		produtos = new ArrayList<SelectItem>();
		for (Produto prod : listaProdutos) {
			SelectItem item = new SelectItem(prod.getIdProduto(), prod
					.getDescricao());
			produtos.add(item);
		}
            return produtos;
	}

Ve se vai funcionar agora.
O método que retorna tem que ser GET.

CrazyFrogJava

resolvi o problema aqui Mauricio… nao precisou nada disso…

notei que nao tava passando pelo meu controller ai ele nao conseguia carregar as combos

valeu ai obrigado pela ajuda

abraços

André :smiley:

anderson.bonavides

Ok, qualquer coisa é só perguntar.

Criado 16 de setembro de 2008
Ultima resposta 18 de set. de 2008
Respostas 5
Participantes 2