[Resolvido] Erro JSF - javax.el.PropertyNotFoundException: Target Unreachable

4 respostas
I

Cenario: Spring, JSF e Hibernate

Erro aparentemente besta e claro:

AVISO: /pessoa.xhtml @76,90 value="#{enderecoUI.endereco.logradouro}": Target Unreachable, 'endereco' returned null javax.el.PropertyNotFoundException: /pessoa.xhtml @76,90 value="#{enderecoUI.endereco.logradouro}": Target Unreachable, 'endereco' returned null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:97)
O erro acontece quando clico no botão Editar, que chama o Dialog, ao meu entender, qdo eu fizesse
<f:setPropertyActionListener value="#{item}"  
                                    target="#{enderecoUI.endereco}" />
meu atributo endereco (da classe Endereco) ia contem o valor do registro do dataTable (que é uma lista de enderecos), mas não é isso que está acontecendo aparentemente, causando o Null

EnderecoUI

@ManagedBean
@SessionScoped
public class EnderecoUI implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{enderecoService}")
	private EnderecoService enderecoService;
	
	private List<Endereco> enderecos;
	private Endereco endereco;
	private Pessoa pessoa;
	
	private Long id;
	
	public EnderecoUI() {
		
	}

	public void salvar() {
		enderecoService.save(endereco);
		enderecos = enderecoService.find(pessoa);
	}
	
	public void editar() {
		//endereco = enderecoService.find(id);
	}
	
	public void novo() {
		endereco = new Endereco();
		endereco.setPessoa(pessoa);
	}
	
	//Getters & Setters
	
	public EnderecoService getEnderecoService() {
		return enderecoService;
	}
	
	public void setEnderecoService(EnderecoService enderecoService) {
		this.enderecoService = enderecoService;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public List<Endereco> getEnderecos() {
		enderecos = enderecoService.find(pessoa);
		return enderecos;
	}

	public void setEnderecos(List<Endereco> enderecos) {
		this.enderecos = enderecos;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
	
}

XHTML

<h:panelGrid id="panelEndereco" columns="4">
            	<p:dataTable id="idEndereco" value="#{enderecoUI.enderecos}" var="item">
            		<f:facet name="header">
		           		#{messages['endereco.lista']}
		           	</f:facet>
            	
            		<p:column id="colunaLogradouro" headerText="#{messages['endereco.logradouro']}">
    					#{item.logradouro}"  
    				</p:column>
    				<p:column id="colunaRua" headerText="#{messages['endereco.rua']}">
    					#{item.rua}  
    				</p:column>
    				<p:column id="colunaNumero" headerText="#{messages['endereco.numero']}">
    					#{item.numero}  
    				</p:column>
    				<p:column id="colunaBtEdit">
    					<p:commandButton id="btEditEndereco" icon="ui-icon-pencil" oncomplete="dlgEndereco.show();">
							<f:setPropertyActionListener value="#{item}"
									target="#{enderecoUI.endereco}" />		
    					</p:commandButton>
    				</p:column>
    				
    				<f:facet name="footer">
    					<p:commandButton id="novoEndereco" value="#{messages['botao.novo']}" oncomplete="dlgEndereco.show()" 
    						style="float:right;" action="#{enderecoUI.novo}" update=":form:display"/>
    				</f:facet>
    			</p:dataTable>
            </h:panelGrid>
            
            <p:commandButton value="#{messages['botao.salvar']}" id="salvar" ajax="false" action="#{pessoaUI.salvar}" />
            <p:commandButton value="#{messages['botao.voltar']}" id="voltar" ajax="false" action="#{pessoaUI.voltar}"/>
            
            <p:dialog id="dialog" widgetVar="dlgEndereco" resizable="false" width="400">
            	<h:panelGrid columns="2" id="display">
            		<f:facet name="header">
            			#{messages['endereco.titulo']}
            		</f:facet>
            		
	           		<p:outputLabel for="endLogradouro" value="#{messages['endereco.logradouro']}"/>
	           		<p:inputText id="endLogradouro" value="#{enderecoUI.endereco.logradouro}"/> //linha 76 do erro
	           	
	           		<p:outputLabel for="endRua" value="#{messages['endereco.rua']}"/>
	           		<p:inputText id="endRua" value="#{enderecoUI.endereco.rua}"/>
	           	
	           		<p:outputLabel for="endNumero" value="#{messages['endereco.numero']}"/>
	            	<p:inputText id="endNumero" value="#{enderecoUI.endereco.numero}"/>
	           	
	           		<f:facet name="footer">
		           		<p:commandButton value="#{messages['botao.salvar']}" action="#{enderecoUI.salvar}">
		           			<f:setPropertyActionListener value="#{pessoaUI.pessoa}"
									target="#{enderecoUI.endereco.pessoa}" />
		           		</p:commandButton>
	           		</f:facet>
           		</h:panelGrid>
            </p:dialog>

4 Respostas

I

Nem meu debug para no metodo enderecoUI.novo =/

Ja tentei trocar de Scope, tentei Request, View (nao sei como funcionam, mas fiz o teste na base da tentativa)

E

Crie um método para inicializar os objetos e marque-o com a anotação @PostConstruct

H

Target Unreachable, ‘endereco’ returned null

Ta falando que o cara está null.

No get faça if (endereco == null){ endereco = new Endereco(); } return endereco;

I

Resolvido colocando process="@this" no commandButton

:slight_smile: :slight_smile: :slight_smile:

Obrigado pessoal

Criado 30 de outubro de 2012
Ultima resposta 30 de out. de 2012
Respostas 4
Participantes 3