[Resolvido] Managed Bean não instância objeto

7 respostas
T

Boa tarde pessoal.

Estou com um probleminha na minha aplicação web. Não sei por qual motivo meu managed bean não esta instanciando meu objeto. Quando preciso passar um atributo para este objeto via inputText recebo uma exception acusando que meu objeto retornou nulo. Abaixo segue minhas classes:

Matricula

<?xml version="1.0" encoding="UTF-8" ?>
<!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:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="/_template.xhtml">

	<ui:define name="corpo">

		<h:form id="formulario">

			<h2>Matrículas</h2>

			<p:tabView>

				<p:tab title="Matrículas">

					<fieldset>
						<legend>Listagem</legend>

						<h:form id="listagem">

							<p:dataTable id="matriculas" var="matriculas" value="#{matriculaBean.matriculas}" 
								emptyMessage="Nenhuma matrícula encontrada." 
								selectionMode="single" selection="#{matriculaBean.matricula}" 
								rowKey="#{matriculas.id}">
													            
				               <p:column id="nome" filterBy="#{matriculas.nome}" headerText="Nome" >
				               		<h:outputText value="#{matriculas.nome}" />
				               </p:column>
				               
				               <p:column id="apelido" filterBy="#{matriculas.apelido}" headerText="Apelido" >
				               		<h:outputText value="#{matriculas.apelido}" />
				               </p:column>
				               
				               <p:column id="cpf" filterBy="#{matriculas.cpf}" headerText="CPF" >
				               		<h:outputText value="#{matriculas.cpf}" />
				               </p:column>		
				               
						        <f:facet name="footer">  
						        
						            <p:commandButton id="novo" value="Novo" type="button" 
						            	onclick="matriculaDialogo.show();" >
						            	<f:ajax execute=":formulario" />
						            </p:commandButton>
						            
						            <p:commandButton id="editar" value="Editar" type="button" 
						            	onclick="matriculaDialogo.show();" update="formulario" >
						            	<f:ajax execute="@this" render="@form" />
						            </p:commandButton>							            							            					 
						            						            					            						            						             
						        </f:facet>  				               		               					               						                 						           					           															
													
							</p:dataTable>
																					
							<p:dialog id="formulario" header="Detalhes da Matrícula" widgetVar="matriculaDialogo" modal="true" dynamic="true" >				        
						             						  								  		
								<fieldset>
			
									<legend>Matricula - TESTE</legend>				
																					
									<h:panelGrid columns="2" >
									
										<h:outputLabel value="Nome:" />
										<p:inputText value="#{matriculaBean.matricula.nome}" />
			
										<h:outputLabel value="Apelido:" />
										<p:inputText value="#{matriculaBean.matricula.apelido}" />
			
										<h:outputLabel value="Email:" />
										<p:inputText value="#{matriculaBean.matricula.email}"  />
										
										<p:commandButton value="Gravar" action="#{matriculaBean.grava}" oncomplete="matriculaDialogo.hide()" onclick="matricula" >
											<f:ajax execute="@this" render="@form" />
										</p:commandButton>	
										
									</h:panelGrid>																												
			
								</fieldset>
						          
						    </p:dialog>						    														
							
						</h:form>

					</fieldset>

				</p:tab>

			</p:tabView>

		</h:form>

	</ui:define>

</ui:composition>

</html>

Aqui meu Managed Bean

package br.com.enterprisestoq.bean;

import java.io.Serializable;
import java.util.GregorianCalendar;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.enterprisestoq.dao.DAO;
import br.com.enterprisestoq.modelos.EstadoCivil;
import br.com.enterprisestoq.modelos.Matricula;

@ManagedBean
@ViewScoped
public class MatriculaBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Matricula> matriculas;
	private Matricula matricula = new Matricula();
	private Long idEstadoCivil;
		
	public String grava() {
		this.matricula.setDataInclusao(new GregorianCalendar().getTime());
		EstadoCivil estadoCivil = new DAO<EstadoCivil>(EstadoCivil.class)
				.buscaPorId(idEstadoCivil);

		this.matricula.setEstadoCivil(estadoCivil);

		DAO<Matricula> dao = new DAO<Matricula>(Matricula.class);
		dao.adiciona(this.matricula);
		this.matricula = new Matricula();
		return "matricula";
	}

	public List<Matricula> getMatriculas() {

		DAO<Matricula> dao = new DAO<Matricula>(Matricula.class);
		this.matriculas = dao.listaTodos();

		return matriculas;
	}

	public void setMatriculas(List<Matricula> matriculas) {
		this.matriculas = matriculas;
	}

	public Matricula getMatricula() {	
		return this.matricula;
	}

	public void setMatricula(Matricula matricula) {
		this.matricula = matricula;
	}

	public Long getIdEstadoCivil() {
		return idEstadoCivil;
	}

	public void setIdEstadoCivil(Long idEstadoCivil) {
		this.idEstadoCivil = idEstadoCivil;
	}

}

E por úlitmo o erro que estou recebendo:

AVISO: /administrativo/matricula.xhtml @68,66 value="#{matriculaBean.matricula.nome}": Target Unreachable, 'matricula' returned null
javax.el.PropertyNotFoundException: /administrativo/matricula.xhtml @68,66 value="#{matriculaBean.matricula.nome}": Target Unreachable, 'matricula' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at org.primefaces.renderkit.InputRenderer.getConverter(InputRenderer.java:162)
	at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:175)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1028)
	at javax.faces.component.UIInput.validate(UIInput.java:958)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1209)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:355)
	at javax.faces.component.UIForm.processValidators(UIForm.java:244)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at org.primefaces.component.tabview.TabView.processValidators(TabView.java:330)
	at javax.faces.component.UIForm.processValidators(UIForm.java:244)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1165)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	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:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
21/03/2012 15:51:56 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/enterprisestoq] threw exception [/administrativo/matricula.xhtml @68,66 value="#{matriculaBean.matricula.nome}": Target Unreachable, 'matricula' returned null] with root cause
javax.el.PropertyNotFoundException: /administrativo/matricula.xhtml @68,66 value="#{matriculaBean.matricula.nome}": Target Unreachable, 'matricula' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at org.primefaces.renderkit.InputRenderer.getConverter(InputRenderer.java:162)
	at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:175)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1028)
	at javax.faces.component.UIInput.validate(UIInput.java:958)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1209)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:355)
	at javax.faces.component.UIForm.processValidators(UIForm.java:244)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at org.primefaces.component.tabview.TabView.processValidators(TabView.java:330)
	at javax.faces.component.UIForm.processValidators(UIForm.java:244)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1086)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1165)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	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:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Obrigado

7 Respostas

H
No get do Matricula faça
public Matricula getMatricula(){
    if(matricula == null){
         matricula = new Matricula();
    }
    
    return matricula;
}
T
jakefrog:
No get do Matricula faça
public Matricula getMatricula(){
    if(matricula == null){
         matricula = new Matricula();
    }
    
    return matricula;
}

Olá jakefrog.

Se eu fizer como vc disse eu recebo esta exception:
javax.servlet.ServletException: java.lang.IllegalArgumentException: id to load is required for loading
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)

Já tinha tentando fazer assim antes. Já quebrei muita cabeça com isso.

H

Na exception toda soh mostra isso?

Pq o modo q eu te passei é o correto, ele mostra esse outro erro pq aquele lá foi corrigido. Tem alguma outra coisa errada aí.

Outra coisa, esses dois aqui estão com o mesmo nome, não sei c tem alguma coisa haver… id=“matriculas” var=“matriculas”

M

Se vc tirar o <f:ajax execute="@this" render="@form" /> do p:commandButton, o erro continua?

T

Ola marcos4ft.

Sim, continua o mesmo erro.

Obrigado

M

Tenta colocar no seu bean um método de inicialização, ± parecido com o método abaixo:

@PostConstruct public void initialize() { matricula = new Matricula(); }

E tira a inicialização da declaração. testa pra ver se funciona.

T

Ola pessoal. Consegui a solução para meu problema.

No meu código uso um data table com um selection para minha variavel matricula.

<p:dataTable id="matriculas" var="matriculas" value="#{matriculaBean.matriculas}" 
									emptyMessage="Nenhuma matrícula encontrada." 
									selectionMode="single" selection="#{matriculaBean.matriculaSelecionada}" 
									rowKey="#{matriculas.id}">
														            
					               <p:column id="nome" filterBy="#{matriculas.nome}" headerText="Nome" >
					               		<h:outputText value="#{matriculas.nome}" />
					               </p:column>
					               
					               <p:column id="apelido" filterBy="#{matriculas.apelido}" headerText="Apelido" >
					               		<h:outputText value="#{matriculas.apelido}" />
					               </p:column>
					               
					               <p:column id="cpf" filterBy="#{matriculas.cpf}" headerText="CPF" >
					               		<h:outputText value="#{matriculas.cpf}" />
					               </p:column>		
					               				               		               					               						                 						           					           																												
								</p:dataTable>

Quando eu abria a página o selection este setava minha variavel matricula para nulo, porque não existia nenhum objeto selecionado. Então qual a solução, criar uma variável especifica para receber a objeto selecionado no data table e, assim, tudo funcionou perfeitamente.

Muito obrigado.

Criado 21 de março de 2012
Ultima resposta 21 de mar. de 2012
Respostas 7
Participantes 3