Erro ao montar SelectOneMenu

7 respostas
A

Boa noite galera, seguinte to tentando colocar uma selectOneMenu e esta dando erro
alguem pode me ajudar?
depois que add esse componente esta dando problema.

package br.com.unip.menudroidweb.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import br.com.unip.menudroidweb.facade.GrupoProdutoFacade;
import br.com.unip.menudroidweb.facade.ProdutoFacade;
import br.com.unip.menudroidweb.model.GrupoProduto;
import br.com.unip.menudroidweb.model.Produto;

@ViewScoped
@ManagedBean (name = "produtoBean")
public class ProdutoBean extends AbstractBean implements Serializable {
	private static final long serialVersionUID = -3644787609339087086L;
	
	private Produto produto;
	private List<SelectItem> grupoProdutos = new ArrayList<SelectItem>();
	private GrupoProduto grupoProduto;
	private List<Produto> produtoLista;
	private ProdutoFacade produtoFacade;
	private GrupoProdutoFacade grupoProdutoFacade;

	public ProdutoFacade getProdutoFacade() {
		if (produtoFacade == null) {
			produtoFacade = new ProdutoFacade();
		}

		return produtoFacade;
	}

	public Produto getProduto() {
		if (produto == null) {
			produto = new Produto();
		}

		return produto;
	}
	

	public GrupoProduto getGrupoProduto() {
		if (grupoProduto == null) {
			grupoProduto = new GrupoProduto();
			
		}

		return grupoProduto;
	}

	public void setGrupoProduto(GrupoProduto grupoProduto) {
		this.grupoProduto = grupoProduto;
	}

	public GrupoProdutoFacade getGrupoProdutoFacade() {
		if (grupoProdutoFacade == null) {
			grupoProdutoFacade = new GrupoProdutoFacade();
			
		}

		return grupoProdutoFacade;
	}

	public void setGrupoProdutoFacade(GrupoProdutoFacade grupoProdutoFacade) {
		this.grupoProdutoFacade = grupoProdutoFacade;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public void createProduto() {
		try {
			produto.setGrupoProduto(grupoProduto);
			getProdutoFacade().createProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro criado com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public void updateProduto() {
		try {
			getProdutoFacade().updateProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro alterado com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public void deleteProduto() {
		try {
			getProdutoFacade().deleteProduto(produto);
			closeDialog();
			displayInfoMessageToUser("Registro excluído com sucesso!");
			loadProduto();
			resetProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	
	public List<SelectItem> getGrupoProdutos() {
		grupoProdutos.clear();
        grupoProdutos.add(new SelectItem(null, "Selecione"));
        List<GrupoProduto> obterGrupoProduto = grupoProdutoFacade.listAll();
        for (int i = 0; i < obterGrupoProduto .size(); i++) {
            GrupoProduto gp = obterGrupoProduto.get(i);
            SelectItem si = new SelectItem(gp.getIdGrupoProduto(), gp.getDescricao());
            grupoProdutos.add(si);
        }

        return grupoProdutos;
	}

	public void setGrupoProdutos(List<SelectItem> grupoProdutos) {
		this.grupoProdutos = grupoProdutos;
	}


	public List<Produto> getAllProduto() {
		if (produtoLista == null) {
			loadProduto();
		}

		return produtoLista;
	}

	private void loadProduto() {
		produtoLista = getProdutoFacade().listAll();
	}

	public void resetProduto() {
		produto = new Produto();
	}
}

view

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:body>
	<p:dialog widgetVar="incluirProduto" id="produtoCreateDialogId"
		height="250" width="600" modal="true" closable="true"
		draggable="false" resizable="false">
		<h:form id="produtoCreateDialogForm" prependId="false">
			<h:panelGrid columns="2">

				<h:outputText value="* Descrição: " />
				<h:inputText value="#{produtoBean.produto.descricao}"
					required="true" label="Descrição: ">
				</h:inputText>

				<h:outputText value="* Preço de Custo " />
				<h:inputText value="#{produtoBean.produto.precoCusto}"
					required="true" label="Preço de Custo ">
				</h:inputText>
				
				<p:outputLabel for="grupoProduto" value="Grupo Produto"/>
				<p:selectOneMenu id="grupoProduto" effect="fade" value="#{produtoBean.grupoProduto.idGrupoProduto}">
					<f:selectItems  value="#{produtoBean.grupoProdutos}"/>    
				</p:selectOneMenu>
				

				<h:outputText value="* Preço de Venda " />
				<h:inputText value="#{produtoBean.produto.precoVenda}"
					required="true" label="Preço de Venda ">
				</h:inputText>

				<h:outputText value="Observação " />
				<h:inputText value="#{produtoBean.produto.observacaoCardapio}"
					required="false" label="Observação ">
				</h:inputText>

				<p:commandButton value="Gravar" icon="ui-icon-plus"
					action="#{produtoBean.createProduto()}"
					update=":produtoForm:produtoTable"
					oncomplete="incluirProduto.hide()" />
				<p:commandButton value="Cancelar" icon="ui-icon-cancel"
					actionListener="#{produtoBean.resetProduto()}"
					onclick="incluirProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>
</h:body>
</html>

Erro

Set 17, 2012 11:55:19 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/produto/dialogs/incluirproduto.xhtml]
javax.el.ELException: /produto/dialogs/incluirproduto.xhtml @26,60 value="#{produtoBean.grupoProdutos}": Error reading 'grupoProdutos' on type br.com.unip.menudroidweb.bean.ProdutoBean
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
	at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:53)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:68)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:62)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
	at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:173)
	at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:103)
	at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:41)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at br.com.unip.menudroidweb.bean.ProdutoBean.getGrupoProdutos(ProdutoBean.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	... 45 more

Set 17, 2012 11:55:19 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/menuDroidWeb] threw exception [null] with root cause
java.lang.NullPointerException
	at br.com.unip.menudroidweb.bean.ProdutoBean.getGrupoProdutos(ProdutoBean.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
	at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:53)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:68)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:62)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
	at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:173)
	at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:103)
	at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:41)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

7 Respostas

Gleidson_Henrique

O erro que deu foi “Caused by: java.lang.NullPointerException”

Tenta preencher com alguma informação do tipo String…

Abraços

rock

Bom dia andreluizs :slight_smile: ,

acho que sua dúvida deveria ser no fórum “Desenvolvimento Web”, mas vamos lá…

java.lang.NullPointerException  
    at br.com.unip.menudroidweb.bean.ProdutoBean.getGrupoProdutos(ProdutoBean.java:121)

Aparentemente o erro ocorreu na linha 121, seria esta aqui certo?

List<GrupoProduto> obterGrupoProduto = grupoProdutoFacade.listAll();

seu grupoProdutoFacade está null, tente :

List<GrupoProduto> obterGrupoProduto = getGrupoProdutoFacade().listAll();

A

Boa tarde rock,
Nem percebi que tinha um subgrupo de Desenvolvimento Web foi mal, se der poderiam mover…

mas deu certo o que você falo, era só usar o get mesmo, é que nao sou acostumado a debugar, não consigo entender direito o debug
to acostumado com o debug de vb6, apesar de ser antigo e defasado acho muito bom o debug dele

voltando ao assunto…

esta inserindo no banco o id do grupo de produto esta tudo ok
agora como eu faco para recuperar esse objeto do select one menu para fazer uma alteração

segue minha view de alteração

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:body>
	<p:dialog widgetVar="alterarProduto"
		id="alterarProdutoDialogId" height="250" width="600" modal="true"
		closable="true" draggable="false" resizable="false">
		<h:form id="alterarProdutoForm" prependId="false">
			<h:panelGrid columns="2">
				<h:outputText value="* Descrição: " />
				<h:inputText value="#{produtoBean.produto.descricao}"
					required="true" label="Descrição: ">
				</h:inputText>
				
				
				<h:outputText value="* Preço de Custo " />
				<h:inputText value="#{produtoBean.produto.precoCusto}"
					required="true" label="Preço de Custo ">
				</h:inputText>
				
				<h:outputText value="* Preço de Venda " />
				<h:inputText value="#{produtoBean.produto.precoVenda}"
					required="true" label="Preço de Venda ">
				</h:inputText>
				
				<h:outputText value="Observação " />
				<h:inputText value="#{produtoBean.produto.observacaoCardapio}"
					label="Observação ">
				</h:inputText>

				<p:commandButton value="Alterar" icon="ui-icon-plus"
					action="#{produtoBean.updateProduto()}"
					update=":produtoForm:produtoTable"
					oncomplete="alterarProduto.hide()" />
				<p:commandButton value="Cancelar" icon="ui-icon-cancel"
					actionListener="#{produtoBean.resetProduto()}"
					onclick="alterarProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>
</h:body>
</html>
rock

andreluizs:
Boa tarde rock,
Nem percebi que tinha um subgrupo de Desenvolvimento Web foi mal, se der poderiam mover…

sem problemas! foi só uma dica, mas eu nem sou moderador para mover…

andreluizs:

mas deu certo o que você falo, era só usar o get mesmo, é que nao sou acostumado a debugar, não consigo entender direito o debug
to acostumado com o debug de vb6, apesar de ser antigo e defasado acho muito bom o debug dele

Legal que deu certo! :smiley:

Sobre o debug é meio que essencial, a não ser que você não vai mais programar em Java depois disso…
Em outro tópico eu vi um post acho que do jakefrog sobre um tutorial de debug, segue o link:
http://www.vogella.com/articles/EclipseDebugging/article.html
Eu olhei por cima ele e achei bem detalhado, passo a passo com imagens, vale a pena você ler com calma para saber como utilizar o debug.

andreluizs:

voltando ao assunto…

esta inserindo no banco o id do grupo de produto esta tudo ok
agora como eu faco para recuperar esse objeto do select one menu para fazer uma alteração

Para fazer a alteração, a view xhtml pode ser até a mesma, só que você deve carregar os dados antes de chamar a view.
Explicando como o componente selectOneMenu irá se comportar no seu caso:

<p:selectOneMenu id="grupoProduto" effect="fade" value="#{produtoBean.grupoProduto.idGrupoProduto}">  
   <f:selectItems  value="#{produtoBean.grupoProdutos}"/>      
</p:selectOneMenu>

Será montada a combo com os itens da lista #{produtoBean.grupoProdutos} e se tiver valor em #{produtoBean.grupoProduto.idGrupoProduto}, o componente irá verificar se existe algum item da lista com esse valor e trará selecionado.

Eu sei fazer isso com JBoss Seam, agora não sei te ajudar com código no seu caso :frowning:

A

Então estou fazendo desse jeito, porem o #{produtoBean.grupoProduto.idGrupoProduto} está trazendo 0 sabe me dizer o porque?

rock

Se você está setando outro valor e está trazendo 0, você não deve estar conseguindo fazer o set (acho que não é o caso, com um debug dá para confirmar) ou creio que está setando no produtoBean de outra view.

:idea: Você pode estar na view ‘list’ por exemplo, setando o valor no produtoBean de ‘list’. Depois você redireciona para a página ‘edit’ e é um novo produtoBean devido ao seu @ViewScoped.
Pode ser que seja isso, minha única idéia no momento.

A

tentei mudar para session mas deu na mesma…
se eu alterar o produto e selecionar um grupo e salvar todos os outros produtos quando clico em alterar vem com a combo marcada daquele grupo que alterei…
eu tentei colocar assim na view de alterar
#{produtoBean.produto.grupoProduto.idGrupoProduto}
funciono por um tempo, até pensei que tinha dado certo…
mas ao rodar de novo tinha produtos que nao tinha nada selecionado entao ele dava erro que estava nullo
nao sei o que fazer, vou postar essa duvida no desenvolvimento web pra ver.

Criado 17 de setembro de 2012
Ultima resposta 19 de set. de 2012
Respostas 7
Participantes 3