Problemas com DataTable e dialogs

4 respostas
fer.ferreira6

Bom Dia Galera,

To com um probleminha e queria a ajuda de vocês.

Tenho um dataTable e dois dialog’s, ambos do primefaces.
Um dialog fica responsável por gravar os dados.
Outro dialog por editar e excluir os dados.
O dataTable fica responsável por listar os dados.

O dialog de inserção é um botão que quando clicado, chama o dialog.
O dialog para alterar e excluir é chamado quando o usuário clica em alguma linha do dataTable.

O problema:
Quando o usuário clica em adicionar, dá o seguinte erro:

javax.servlet.ServletException: javax.el.PropertyNotFoundException: /admin/gerenciar-departamentos.xhtml @92,138 value="#{departamentoMB.departamentoTemp.titulo}": Target Unreachable, 'departamentoTemp' returned null

Alguém sabe resolver esse erro?

O código do html:

<?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:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <ui:composition template="/admin/Template/template.xhtml">
        <ui:define name="corpo">
            <h:head>
                <title>Gerencie seus Departamentos</title>
            </h:head>
            <h:body>
                <h:form id="form">
                    <table>
                        <tr>
                            <td>
                                <div id="barra_menuAcessoRapido">
                                    <table>
                                        <tr>
                                            <td>
                                                <p:commandButton value="Novo Departamento" onclick="dialog_novoDepartamento.show();" ajax="false" type="button"/>
                                            </td>
                                        </tr>
                                    </table>
                                    <p:dialog header="Novo Departamento" widgetVar="dialog_novoDepartamento" modal="true" height="270" width="400" resizable="false" showEffect="explode" hideEffect="explode" onCloseUpdate="panelGoup_dialog">
                                        <h:panelGroup layout="block" id="panelGroup_novoDepartamento">
                                        <table>
                                            <tr>
                                                <td><h:outputLabel value="Título" for="inputText_titulo" id="outputLabel_titulo"/></td>
                                                <td><p:inputText value="#{departamentoMB.departamento.titulo}" id="inputText_titulo" size="58"/></td>
                                            </tr>
                                            <tr>
                                                <td><h:outputLabel value="Tags" for="inputText_tags" id="outputLabel_tags"/></td>
                                                <td><p:inputText value="#{departamentoMB.departamento.tags_meta}" id="inputText_tags" size="58"/></td>
                                            </tr>
                                            <tr>
                                                <td><h:outputLabel value="Descrição" for="inputTextArea_descricao" id="outputLabel_descricao"/></td>
                                                <td><p:inputTextarea value="#{departamentoMB.departamento.descricao_meta}" autoResize="false" cols="60" rows="7" id="inputTextArea_descricao"/></td>
                                            </tr>
                                            <tr>
                                                <td></td>
                                                <td><p:commandButton value="Salvar" actionListener="#{departamentoMB.salvar}" ajax="false"/></td>
                                            </tr>
                                        </table>
                                            </h:panelGroup> 
                                    </p:dialog>	
                                </div>
                            </td>
                        </tr>
                    </table>

                    <p:dataTable var="departamentos" id="dataTable_departamento" value="#{departamentoMB.listaDepartamentos}" paginator="true" rows="10" selection="#{departamentoMB.departamentoTemp}" selectionMode="single" onRowSelectUpdate="panelGroup_dialog" onRowSelectComplete="dialog_alterarDepartamento.show()">
                        <p:column sortBy="#{departamentos.id}" filterBy="#{departamentos.id}" >
                            <f:facet name="header">
                                <h:outputText value="Id" />
                            </f:facet>
                            <h:outputText value="#{departamentos.id}" />
                        </p:column>

                        <p:column sortBy="#{departamentos.titulo}" filterBy="#{departamentos.titulo}">
                            <f:facet name="header">
                                <h:outputText value="Título" />
                            </f:facet>
                            <h:outputText value="#{departamentos.titulo}" />
                        </p:column>

                        <p:column sortBy="#{departamentos.tags_meta}" filterBy="#{departamentos.tags_meta}">
                            <f:facet name="header">
                                <h:outputText value="SEO - Tags" />
                            </f:facet>
                            <h:outputText value="#{departamentos.tags_meta}" />
                        </p:column>

                        <p:column sortBy="#{departamentos.descricao_meta}" filterBy="#{departamentos.descricao_meta}">
                            <f:facet name="header">
                                <h:outputText value="SEO - Descrição" />
                            </f:facet>
                            <h:outputText value="#{departamentos.descricao_meta}" />
                        </p:column>
                    </p:dataTable>
                    
                    <p:dialog header="Altere o Departamento" widgetVar="dialog_alterarDepartamento" modal="true" height="270" width="400" resizable="false" showEffect="explode" hideEffect="explode" onCloseUpdate="dataTable_departamento">
                        <h:panelGroup layout="block" id="panelGroup_dialog">
                            <table>
                                <tr>
                                    <td><h:outputLabel value="Id" for="inputText_id" id="outputLabel_id"/></td>
                                    <td><p:inputText value="#{departamentoMB.departamentoTemp.id}" id="inputText_id" size="5" readonly="true"/></td>
                                </tr>
                                <tr>
                                    <td><h:outputLabel value="Título" for="inputText_titulo2" id="outputLabel_titulo2"/></td>
                                    <td><p:inputText value="#{departamentoMB.departamentoTemp.titulo}" id="inputText_titulo2" size="58"/></td>
                                </tr>
                                <tr>
                                    <td><h:outputLabel value="Tags" for="inputText_tags2" id="outputLabel_tags2"/></td>
                                    <td><p:inputText value="#{departamentoMB.departamentoTemp.tags_meta}" id="inputText_tags2" size="58"/></td>
                                </tr>
                                <tr>
                                    <td><h:outputLabel value="Descrição" for="inputTextArea_descricao2" id="outputLabel_descricao2"/></td>
                                    <td><p:inputTextarea value="#{departamentoMB.departamentoTemp.descricao_meta}" autoResize="false" cols="60" rows="7" id="inputTextArea_descricao2"/></td>
                                </tr>
                            </table>
                            <table>
                                <tr>
                                    <td><p:commandButton value="Alterar" actionListener="#{departamentoMB.alterar}" ajax="false"/></td>
                                    <td><p:commandButton value="Excluir" actionListener="#{departamentoMB.excluir}" ajax="false"/></td>
                                </tr>
                            </table>
                        </h:panelGroup>
                    </p:dialog>	
                </h:form>
            </h:body>
        </ui:define>
    </ui:composition>
</html>

4 Respostas

Hebert_Coelho

Parece que departamentoMB.departamentoTemp está retornando null.

fer.ferreira6

SIm, mas ele foi instanciado normalmente, código do controller:

package ManagedBean;


import Dao.DepartamentoDao;
import Modelo.Departamento;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;


/**
 *
 * @author fernando
 */
@ManagedBean(name="departamentoMB")
@RequestScoped
public class DepartamentoManagedBean {
    private Departamento departamento;
    private DepartamentoDao departamentoDao = new DepartamentoDao();
    private List<Departamento> listaDepartamentos = new ArrayList<Departamento>();
    private Departamento departamentoTemp;
    private List<Departamento> listaDepartamentosParaListBox;
    
    public DepartamentoManagedBean(){
        this.departamento = new Departamento();
        this.departamentoTemp = new Departamento();
    }

    public Departamento getDepartamento() {
        return this.departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public List<Departamento> getListaDepartamentos() {
        this.listaDepartamentos = this.departamentoDao.listarTodos();
        return this.listaDepartamentos;
    }

    public Departamento getDepartamentoTemp() {
        return departamentoTemp;
    }

    public void setDepartamentoTemp(Departamento departamentoTemp) {
        this.departamentoTemp = departamentoTemp;
    }

    public List<Departamento> getListaDepartamentosParaListBox() {
        this.listaDepartamentosParaListBox = this.departamentoDao.listarTodos();
        List listaTemp = new ArrayList();

        for (Departamento departamentoLIsta : this.listaDepartamentosParaListBox) {
            SelectItem si = new SelectItem();
            si.setLabel(departamentoLIsta.getTitulo());
            si.setValue(departamentoLIsta.getId().toString());
            listaTemp.add(si);
            si = null;
        }
        return listaTemp;
    }
    
    public void salvar(){
        this.departamentoDao.salvar(this.departamento);
    }
    
    public void alterar(){
        this.departamentoDao.alterar(this.departamentoTemp);
        this.departamentoTemp = new Departamento();
    }
    
    public void excluir(){
        this.departamentoDao.excluir(this.getDepartamentoTemp().getId());
    }
}
Hebert_Coelho

Faz o seguinte, tenta colocar o new no get ao invés do contrutor.

Faz um if == null return new else return this.

fer.ferreira6

Cara, aparentemente rodo certinho.
Muito obrigado, ia ficar muito tempo quebrando a cabeça pra achar essa solução.

Criado 11 de dezembro de 2011
Ultima resposta 11 de dez. de 2011
Respostas 4
Participantes 2