Cenario: Spring, JSF e Hibernate
Erro aparentemente besta e claro:
[quote]
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)[/quote]
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
[code]
@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;
}
}[/code]
XHTML
[code]
<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>[/code]