Olá,
estou tendo dificuldades com o JSF para pegar o valor contido em um atributo do objeto. Acredito que o problema esteja no fato deste objeto estar dentro de uma hierarquia TEM-UM: ObjetoPai.ObjetoContidoA.ObjetoContidoB.ObjetoContidoC. Estou tentando acessar os métodos deste ultimo objeto através de EL nas tags JSF. Segue o código abaixo:
<h:dataTable
value="#{AvaliacaoMainBB.avaliacao.avaliacaoDesempenho.avaliacaoCompetencias.competencias}"
var="competencia">
<h:column>
<h:dataTable id="comportamento" value="#{competencia.comportamentos}" var="comportamento">
<h:column>
<f:facet name="header">
<h:panelGrid columns="1">
<h:outputText value=" " />
<h:outputText value="#{competencia.nomeCompetencia}" />
<h:outputText value="#{competencia.descricaoCompetencia}" />
</h:panelGrid>
</f:facet>
<h:outputText value=" - #{comportamento.descricaoComportamento}" />
<br />
<h:inputTextarea value="#{comportamento.obsComportamento}" cols="105" />
<h:commandButton value="#{msg.botaoGravar}" actionListener="#AvaliacaoMainBB.avaliacao.avaliacaoDesempenho.avaliacaoCompetencias.gravarObservacaoComportamento}">
<f:attribute name="idComportamento" value="#{comportamento.id}" />
</h:commandButton>
</h:column>
O trecho acima representa uma pagina jsp que exibirá uma lista de objetos Comportamento com seu devido nome e descricao.
Abaixo segue o faces-config.xml para os beans que atualmente estão mapeados:
<managed-bean>
<managed-bean-name>AvaliacaoCompetencias</managed-bean-name>
<managed-bean-class>jsf.backing.avaliacao.AvaliacaoCompetencias</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>AvaliacaoMainBB</managed-bean-name>
<managed-bean-class>jsf.backing.AvaliacaoMainBB</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>avaliacao</property-name>
<value>#{AvaliacaoBB}</value>
</managed-property>
</managed-bean>
O problema ocorre ao se tentar pegar o #{comportamento.id}
Ocorre um NullpointerException neste código:
public String gravarObservacaoComportamento(ActionEvent event){
if(avaliacaoComportamentoMap != null){
Object value = event.getComponent().getAttributes().get("idComportamento");
if(value != null){
Integer idComportamento = new Integer(value.toString());
AvaliacaoComportamento avaliacaoComportamento = new AvaliacaoComportamento();
avaliacaoComportamento.setId(new AvaliacaoComportamentoPK(UserContext.getIdAvaliacaoAberta(), new Long(idComportamento.intValue())));
avaliacaoComportamento.setObservacao(avaliacaoComportamento.getObservacao());
AvaliacaoComportamentoDAO.getInstance().saveOrUpdate(avaliacaoComportamento); //Registra tudo de comportamento.
return null;
}else{
throw new IllegalArgumentException("Componente não encontrado: " + value);
}
}
return null;
}
Alguém poderia me ajudar?