INFO: javax.el.PropertyNotFoundException:

6 respostas
Diego_Adriano

Bem galera, estou tendo um problema estranho, o jsf esta me retornando esse erro quando tento fazer a chamada do fornecedor pelo Cnpj ou Id, porém, se eu usar o autocomplete e fazer a consulta ele preenche o Cnpj e o Id

<h:panelGrid columns="3" columnClasses="colunaEsquerda,colunaDireita" style="margin-left:42px;">
						
	<h:outputText value="Código: "/>
	<p:inputText size="10"
			 value="#{entradaBean.entrada.fornecedor.id}">
		<p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedorCodigo}" />	 
	</p:inputText>			 
	<p:commandButton icon="ui-icon-search" oncomplete="dialogFornecedor.show()" ajax="false"/>
					
	</h:panelGrid>
	<h:panelGrid columns="2" columnClasses="colunaEsquerda,colunaDireita" style="margin-left:14px;">
				
	<h:outputText value="CNPJ: "/>
	<p:inputMask size="19"
			 required="true"
			 value="#{entradaBean.entrada.fornecedor.cnpj}"
			 mask="99.999.999/9999-99">
		<f:validator validatorId="CnpjValidator"/>
	        <p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedorCNPJ}"/>		 
	</p:inputMask>	
						
	<h:outputText value="Fornecedor: "/>
	<p:autoComplete value="#{entradaBean.fornecedorSelecionado}" completeMethod="#{entradaBean.completefornecedor}" 
				var="fornecedor" itemValue="#{fornecedor}" itemLabel="#{fornecedor.nome_Fantasia}"				 
				converter="Converter"
				onkeyup="this.value = this.value.toUpperCase();"
				size="50">
		<p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedor}" />			
	</p:autoComplete>
Código: Erro:
Ago 20, 2012 10:14:41 PM com.sun.faces.context.PartialViewContextImpl processPartial
INFO: javax.el.PropertyNotFoundException: /pages/entrada/entrada.xhtml @36,56 value="#{entradaBean.entrada.fornecedor.id}": Target Unreachable, 'fornecedor' returned null
javax.el.PropertyNotFoundException: /pages/entrada/entrada.xhtml @36,56 value="#{entradaBean.entrada.fornecedor.id}": Target Unreachable, 'fornecedor' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at org.primefaces.renderkit.InputRenderer.getConverter(InputRenderer.java:154)
	at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:167)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	at javax.faces.component.UIInput.validate(UIInput.java:960)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:508)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1589)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1170)
	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:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.boletos.filter.ControleFiltro.doFilter(ControleFiltro.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	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:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	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:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
public Entrada buscaFornecedorCodigo(){
		
		try {
			if (entrada.getFornecedor().getId() != null || entrada.getFornecedor().getId() > 0){
				
				FornecedorRepository fr = new FornecedorRepository(getEntityManager());
				entrada.setFornecedor(fr.fornecedoresPorId(entrada.getFornecedor().getId()));
				
				if (entrada.getFornecedor().getId() == null){
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO,""+getUsuario().getNome(), " - FORNECEDOR NÃO CADASTRADO"));
					
				}else{
						setFornecedorSelecionado(entrada.getFornecedor());
				}
				
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR,""+getUsuario().getNome(), " - INFORME O CÓDIGO"));
			}
		} catch (NullPointerException e) {
			e.printStackTrace();
		}
		return entrada;
	}

6 Respostas

Hebert_Coelho

Cara, basta ler a mensagem:
value="#{entradaBean.entrada.fornecedor.id}": Target Unreachable, ‘fornecedor’ returned null

Você deu algum valor para fornecedor?

Diego_Adriano

Cara, eu li a stack trace .. li bastante ... mas n consigo entender pq ele não faz a busca pelo Id e nem pelo Cnpj e pelo autocomplete sim ...
Bem, o q eu entendo é que o autocomplete abastece primeiramente o FornecedorSelecionado e posteriormente o objeto "Entrada", agora, pq ? Eu dou um new no contrutor do Bean para Entrada ..

public EntradaBean() {
		
			   entrada = new Entrada();
  	 dadosEntrada = new DadosEntrada();
  entradas = new ArrayList<DadosEntrada>();
	fornecedores = new ArrayList<Fornecedor>();
	   produtos = new ArrayList<Produto>();
   				  qtd = new Integer(0);
  				 vu = new Double(0.00);
   			entrada.setValor_NF(0.00);
		
	}
Hebert_Coelho

Entrada tem getFornecedor? Se sim, tá voltando null.

Se for getFornecedores tá tudo errado. Você não pode acessar por . uma lista.

OBS.: Se funcionar em um canto, não é obrigado a funcionar no outro. Ou você compara o que está diferente entre um e outro ou você esquece que na outra parte está funcionando e foca na parte que está com erro.

Diego_Adriano
Bem, vms do começo .. Classe Entrada:
public class Entrada implements Serializable {
        
        @ManyToOne
	@JoinColumn(name="fornecedor")
	private Fornecedor fornecedor;
Bean:
@ManagedBean
@SessionScoped
public class EntradaBean implements Serializable{

	private Entrada entrada;

        public EntradaBean() {
		
	   entrada = new Entrada();
	}

	public Entrada buscaFornecedorCodigo(){
		System.out.println(entrada.getFornecedor().getId());
		try {
			if (entrada.getFornecedor().getId() != null || entrada.getFornecedor().getId() > 0){
				
				FornecedorRepository fr = new FornecedorRepository(getEntityManager());
				entrada.setFornecedor(fr.fornecedoresPorId(entrada.getFornecedor().getId()));
				
				if (entrada.getFornecedor().getId() == null){
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO,""+getUsuario().getNome(), " - FORNECEDOR NÃO CADASTRADO"));
					
				}else{
						setFornecedorSelecionado(entrada.getFornecedor());
				}
				
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR,""+getUsuario().getNome(), " - INFORME O CÓDIGO"));
			}
		} catch (NullPointerException e) {
			e.printStackTrace();
		}
		return entrada;
	}
View:
<h:panelGrid columns="3" columnClasses="colunaEsquerda,colunaDireita" style="margin-left:42px;">
						
	<h:outputText value="Código: "/>
	<p:inputText size="10"
			 value="#{entradaBean.entrada.fornecedor.id}">
		<p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedorCodigo}" />	 
	</p:inputText>			 
	<p:commandButton icon="ui-icon-search" oncomplete="dialogFornecedor.show()" ajax="false"/>
				
</h:panelGrid>
<h:panelGrid columns="2" columnClasses="colunaEsquerda,colunaDireita" style="margin-left:14px;">
					
	<h:outputText value="CNPJ: "/>
	<p:inputMask size="19"
			 required="true"
			 value="#{entradaBean.entrada.fornecedor.cnpj}"
			 mask="99.999.999/9999-99">
		<f:validator validatorId="CnpjValidator"/>
		<p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedorCNPJ}"/>		 
	</p:inputMask>	
						
	<h:outputText value="Fornecedor: "/>
	<p:autoComplete value="#{entradaBean.fornecedorSelecionado}" completeMethod="#{entradaBean.completefornecedor}" 
				var="fornecedor" itemValue="#{fornecedor}" itemLabel="#{fornecedor.nome_Fantasia}"				 
				converter="Converter"
				onkeyup="this.value = this.value.toUpperCase();"
				size="50">
		<p:ajax event="blur" update="formDados" listener="#{entradaBean.buscaFornecedor}" />			
	</p:autoComplete>				
					
</h:panelGrid>

Bem, acho que agora ficou mais claro, correto ? Como vê, tenho 3 formas de consultar um fornecedor, Id, Cnpj, Nome (AutoComplete).
Consulta por ID e Cnpj estão com o mesmo problema ... E o AutoComplete funciona corretamente ...
Agora, a forma que estou criando a estrutura do Bean esta correta não esta ?

Diego_Adriano
Bão, fiz o seguinte pra resolver o problema: Criei um Objeto de Fornecedor na EntradaBean, então ao invés de ligar dessa forma:
value="#{entradaBean.entrada.fornecedor.id}"
Ligo dessa :
value="#{entradaBean.fornecedor.id}"

Não sei se é certo ... Mas estou tendo muitos problemas quando tento acessar as Propriedades de Entrada

S

Diego, me passa teu converter, por favor.

Outra coisa, é mesmo importante ter que passr pelo ID?

passa pelo nome, talvez funcione melhor.

se ficar mais fácil, pra mim, é, passe pelo e-mail.

Criado 20 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 6
Participantes 3