Problema em alterar e excluir com o DataTable Primefaces

5 respostas
jhonnyW

Olá pessoal estou tentando alterar e excluir usuários no desenvolvimento do meu sistema ... minha página de usuários é essa

GerenciarUsuarios.xhtml
<?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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
    </h:head>
    <h:body>
        <ui:composition template="./Template.xhtml">
            <ui:define name="content">
                <h:form>
                    <p:dialog header="Cadastrar usuário"  id="createDg" widgetVar="createDg" >
                        <h:panelGrid cellspacing="2"  columns="2">
                            <h:outputLabel value="Nome:" for="nome"/>
                            <p:inputText id="nome" value="#{loginManagedBean.login.nome}" title="Nome"/>
                            <h:outputLabel value="Email:" for="email"/>
                            <p:inputText id="email" value="#{loginManagedBean.login.email}" title="Email"/>
                            <h:outputLabel value="Username:" for="username"/>
                            <p:inputText id="username" value="#{loginManagedBean.login.username}" title="Username"/>
                            <h:outputLabel value="Password:" for="password"/>
                            <p:password feedback="true" required="true" weakLabel="Senha fraca" strongLabel="Senha forte" promptLabel="Por favor digite uma senha" goodLabel="Senha aceitável" inline="true" minLength="6" id="password" value="#{loginManagedBean.login.password}" title="Password" />
                            <h:outputLabel value="Autorizacao:" for="autorizacao"/>
                            <p:selectOneMenu id="autorizacao" required="true" value="#{loginManagedBean.login.autorizacao}">
                                <p:ajax event="change" update="localp"/> 
                                <f:selectItem itemValue="#" itemLabel="Selecione um Perfil"/>
                                <f:selectItem itemValue="Administrador" itemLabel="Administrador"/>
                                <f:selectItem itemValue="Coordenador" itemLabel="Coordenador"/>
                                <f:selectItem itemValue="Visualizador" itemLabel="Visualizador"/>
                            </p:selectOneMenu>
                        </h:panelGrid>
                        <h:panelGrid id="localp"  columns="2">
                            <h:outputText value="Local:" rendered="#{loginManagedBean.login.autorizacao == loginManagedBean.teste}"/>
                            <p:selectOneMenu id="local" rendered="#{loginManagedBean.login.autorizacao == loginManagedBean.teste}"  value="#{loginManagedBean.login.espaço}" >
                                <f:selectItem itemValue="#" itemLabel="Selecione um espaço"/>
                                <f:selectItems var="espaco" value="#{espacoManagedBean.espacoLista}" itemLabel="#{espaco.nome}" itemValue="#{espaco}" itemDescription="#{espaco.endereco}"/>
                            </p:selectOneMenu>
                        </h:panelGrid>
                        <br/>
                        <p:commandButton value="Cadastrar" onclick="createDg.close(); loginTb.update();"  action="#{loginManagedBean.gravar()}"/>
                    </p:dialog>
                    <p:dataTable  value="#{loginManagedBean.loginLista}" widgetVar="loginTb" var="login">
                        <f:facet name="header">
                            <p:commandButton value="Cadastrar Usuário"  onclick="createDg.show()"/>
                            <p:outputPanel style="float: right;">
                                <h:outputText value="Procurar em Tudo:" />
                                <h:inputText id="globalFilter" onkeyup="loginTb.filter();" />
                            </p:outputPanel>
                        </f:facet>
                        <p:column headerText="Nome">
                            <h:outputText value="#{login.nome}"/>
                        </p:column>
                        <p:column headerText="Usuário">
                            <h:outputText value="#{login.username}"/>
                        </p:column>
                        <p:column headerText="Senha">
                            <h:outputText value="#{login.password}"/>
                        </p:column>
                        <p:column headerText="E-mail">
                            <h:outputText value="#{login.email}"/>
                        </p:column>
                        <p:column headerText="Perfil" sortBy="#{login.autorizacao}" >
                            <h:outputText value="#{login.autorizacao}"/>
                        </p:column>
                        <p:column headerText="#{login.enable()}" sortBy="#{login.enable}">
                            <h:outputText value="Habilitado" rendered="#{login.enable==true}"/>
                            <h:outputText value="Desabilitado" rendered="#{login.enable==false}"/>
                        </p:column>
                        <p:column>
                            <p:commandButton  value="Alterar" onclick="alterDg.show();">
                                <f:ajax render="@form"/>
                                <f:setPropertyActionListener value="#{login}"  target="#{loginManagedBean.loginselecionado}" />
                            </p:commandButton>
                            <p:commandButton value="Excluir" onclick="deleteCd.show();" >
                                <f:ajax render="@form"/>
                                <f:setPropertyActionListener value="#{login}"  target="#{loginManagedBean.loginselecionado}" />
                            </p:commandButton>
                        </p:column>
                    </p:dataTable>
                    <h:form id="dialogsForm">
                        <p:confirmDialog id="deleteDg" message="Deseja deletar o usuário #{loginManagedBean.loginselecionado.nome} do sistema?" header="Deletar usuário" severity="alert" widgetVar="deleteCd">
                            <p:commandButton value="Sim" actionListener="#{loginManagedBean.excluirNaTabela(loginselecionado)}" onclick="deleteDg.close(); loginTb.update();">
                            </p:commandButton>
                            <p:commandButton  value="Não" onclick="deleteCd.close(); loginTb.update();" />
                        </p:confirmDialog>
                        <p:dialog id="alterDg"  widgetVar="alterDg" >
                            <p:panel id="alterP" menuTitle="Alterar Usuário">
                                <h:panelGrid columns="2">
                                    <h:outputLabel value="Nome:"  />
                                    <p:inputText value="#{loginManagedBean.loginselecionado.nome}" title="Nome" />
                                    <h:outputLabel value="Email:" />
                                    <p:inputText value="#{loginManagedBean.loginselecionado.email}" title="Email" />
                                    <h:outputLabel value="Username:"  />
                                    <p:inputText  value="#{loginManagedBean.loginselecionado.username}" title="Username" />
                                    <h:outputLabel value="Password:"  />
                                    <p:password feedback="true" minLength="6" value="#{loginManagedBean.loginselecionado.password}" title="Password" />
                                    <h:outputLabel value="Autorizacao:"  />
                                    <p:selectOneMenu   required="true" value="#{loginManagedBean.loginselecionado.autorizacao}" >
                                        <p:ajax event="change"   update="alterP"/>
                                        <f:selectItem itemValue="#" itemLabel="Selecione um Perfil"/>
                                        <f:selectItem itemValue="Administrador" itemLabel="Administrador"/>
                                        <f:selectItem itemValue="Coordenador" itemLabel="Coordenador"/>
                                        <f:selectItem itemValue="Visualizador" itemLabel="Visualizador"/>
                                    </p:selectOneMenu> 
                                    <h:outputText value="Local:" rendered="#{loginManagedBean.loginselecionado.autorizacao == loginManagedBean.teste}"/>
                                    <p:selectOneMenu  rendered="#{loginManagedBean.loginselecionado.autorizacao == loginManagedBean.teste}"  value="#{loginManagedBean.loginselecionado.espaço}" >
                                        <f:selectItem itemValue="#" itemLabel="Selecione um espaço"/>
                                        <f:selectItems var="espaco" value="#{espacoManagedBean.espacoLista}" itemLabel="#{espaco.nome}" itemValue="#{espaco}" itemDescription="#{espaco.endereco}"/>
                                    </p:selectOneMenu>
                                    <p:commandButton value="Alterar" onclick="alterDg.close(); loginTb.update();"  action="#{loginManagedBean.gravarNaTabela(loginselecionado)}"/>
                                </h:panelGrid>
                            </p:panel>
                        </p:dialog>
                    </h:form>
                </h:form>
            </ui:define>
        </ui:composition>
    </h:body>
</html>
Meu Bean LoginManagedBean
package session;
import dao.DaoGenerico;
import dao.DaoLogin;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Login;
import org.primefaces.event.RowEditEvent;
/**
 *
 * @author Jhonny
 */
@ManagedBean
@SessionScoped
public class loginManagedBean {

    private String teste = "Coordenador";
    private Login login = new Login();
    private Login loginselecionado = new Login();
    private List<Login> loginLista = new ArrayList<Login>();
    private List<Login> coordenadorLista = new ArrayList<Login>();

    
    
    public void gravar() {
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            if (login.getId() == null) {

                login.setEnable(true);
                dao.save(login);

            } else {
                dao.update(login);
            }
            login = new Login();
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public void gravarNaTabela(Login item) {
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            if (item.getId() == null) {

                item.setEnable(true);
                dao.save(item);

            } else {
                dao.update(item);
            }
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public void excluirNaTabela(Login item) {
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            item.setEnable(false);
            dao.update(item);
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public void onEditRow(RowEditEvent event) {
        Login item = (Login) event.getObject();
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            dao.update(item);
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public void alterarNaTabela(RowEditEvent event) {
        Login item = (Login) event.getObject();
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            dao.update(item);
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public void excluir() {
        DaoGenerico<Login> dao = new DaoGenerico<Login>(Login.class);
        try {
            dao.delete(login);
            login = new Login();
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public String getTeste() {
        return teste;
    }

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public List<Login> getCoordenadorLista() {
        coordenadorLista = new DaoLogin().listCoordenadores();
        return coordenadorLista;
    }

    public void setCoordenadorLista(List<Login> coordenadorLista) {
        this.coordenadorLista = coordenadorLista;
    }

    public List<Login> getLoginLista() {
        
        loginLista = new DaoGenerico<Login>(Login.class).listaTodos();
        for (Login login1 : loginLista) {
            System.out.println(login1);
        }
        return loginLista;
    }

    public Login getLoginselecionado() {
        return loginselecionado;
    }

    public void setLoginselecionado(Login loginselecionado) {
        this.loginselecionado = loginselecionado;
    }
    
}

Acontece que também estou pegando um erro que é desconhecido pra mim:
MonitorFilter::WARNING: the monitor filter must be the first filter in the chain.

então qualquer ajuda é válida e obrigado por entenderem o código bagunçado :)

5 Respostas

jhonnyW

Sei que parece muito código para ler
mas coloquei logo tudo
se concentrando apenas do datatable acho que já daria para ajudar
realmente precisando de ajuda aqui :slight_smile:

A

qual erro está aparecendo? se tiver o erro fica mais fácil :smiley:

jhonnyW

Ai é que ta …
não aparece erro mas também ele não pega o usuário do datatable para aparecer no dialog e no confirm dialog
que seria setar o target
no f:sestargetlistener

DarthCego

Ola amigo

tenta criar o dialog em um form separado fora do form principal ao inves de ter um form dentro do outro, as vezes isso da problema,
eu tbm faria um form so para a datatable mas ai depende de vc

Abraços

jhonnyW

Bom fazendo as alterações mencionadas pelo darth moul :

<?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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
    </h:head>
    <h:body>
        <ui:composition template="./Template.xhtml">
            <ui:define name="content">
                <h:form id="createFrom">
                    <p:dialog header="Cadastrar usuário"  id="createDg" widgetVar="createDg" >
                        <h:panelGrid cellspacing="2"  columns="2">
                            <h:outputLabel value="Nome:" for="nome"/>
                            <p:inputText id="nome" value="#{loginManagedBean.login.nome}" title="Nome"/>
                            <h:outputLabel value="Email:" for="email"/>
                            <p:inputText id="email" value="#{loginManagedBean.login.email}" title="Email"/>
                            <h:outputLabel value="Username:" for="username"/>
                            <p:inputText id="username" value="#{loginManagedBean.login.username}" title="Username"/>
                            <h:outputLabel value="Password:" for="password"/>
                            <p:password feedback="true" required="true" weakLabel="Senha fraca" strongLabel="Senha forte" promptLabel="Por favor digite uma senha" goodLabel="Senha aceitável" inline="true" minLength="6" id="password" value="#{loginManagedBean.login.password}" title="Password" />
                            <h:outputLabel value="Autorizacao:" for="autorizacao"/>
                            <p:selectOneMenu id="autorizacao" required="true" value="#{loginManagedBean.login.autorizacao}">
                                <p:ajax event="change" update="localp"/> 
                                <f:selectItem itemValue="#" itemLabel="Selecione um Perfil"/>
                                <f:selectItem itemValue="Administrador" itemLabel="Administrador"/>
                                <f:selectItem itemValue="Coordenador" itemLabel="Coordenador"/>
                                <f:selectItem itemValue="Visualizador" itemLabel="Visualizador"/>
                            </p:selectOneMenu>
                        </h:panelGrid>
                        <h:panelGrid id="localp"  columns="2">
                            <h:outputText value="Local:" rendered="#{loginManagedBean.login.autorizacao == loginManagedBean.teste}"/>
                            <p:selectOneMenu id="local" rendered="#{loginManagedBean.login.autorizacao == loginManagedBean.teste}"  value="#{loginManagedBean.login.espaço}" >
                                <f:selectItem itemValue="#" itemLabel="Selecione um espaço"/>
                                <f:selectItems var="espaco" value="#{espacoManagedBean.espacoLista}" itemLabel="#{espaco.nome}" itemValue="#{espaco}" itemDescription="#{espaco.endereco}"/>
                            </p:selectOneMenu>
                        </h:panelGrid>
                        <br/>
                        <p:commandButton value="Cadastrar" onclick="createDg.close(); loginTb.update();"  action="#{loginManagedBean.gravar()}"/>
                    </p:dialog>
                </h:form>
                <h:form id="alterForm">
                    <p:dialog id="alterDg"  widgetVar="alterDg" >
                        <p:panel id="alterP" menuTitle="Alterar Usuário">
                            <h:panelGrid columns="2">
                                <h:outputLabel value="Nome:"  />
                                <p:inputText value="#{loginManagedBean.loginselecionado.nome}" title="Nome" />
                                <h:outputLabel value="Email:" />
                                <p:inputText value="#{loginManagedBean.loginselecionado.email}" title="Email" />
                                <h:outputLabel value="Username:"  />
                                <p:inputText  value="#{loginManagedBean.loginselecionado.username}" title="Username" />
                                <h:outputLabel value="Password:"  />
                                <p:password feedback="true" minLength="6" value="#{loginManagedBean.loginselecionado.password}" title="Password" />
                                <h:outputLabel value="Autorizacao:"  />
                                <p:selectOneMenu   required="true" value="#{loginManagedBean.loginselecionado.autorizacao}" >
                                    <p:ajax event="change"   update="alterP"/>
                                    <f:selectItem itemValue="#" itemLabel="Selecione um Perfil"/>
                                    <f:selectItem itemValue="Administrador" itemLabel="Administrador"/>
                                    <f:selectItem itemValue="Coordenador" itemLabel="Coordenador"/>
                                    <f:selectItem itemValue="Visualizador" itemLabel="Visualizador"/>
                                </p:selectOneMenu> 
                                <h:outputText value="Local:" rendered="#{loginManagedBean.loginselecionado.autorizacao == loginManagedBean.teste}"/>
                                <p:selectOneMenu  rendered="#{loginManagedBean.loginselecionado.autorizacao == loginManagedBean.teste}"  value="#{loginManagedBean.loginselecionado.espaço}" >
                                    <f:selectItem itemValue="#" itemLabel="Selecione um espaço"/>
                                    <f:selectItems var="espaco" value="#{espacoManagedBean.espacoLista}" itemLabel="#{espaco.nome}" itemValue="#{espaco}" itemDescription="#{espaco.endereco}"/>
                                </p:selectOneMenu>
                                <p:commandButton value="Alterar" onclick="alterDg.close(); loginTb.update();"  action="#{loginManagedBean.gravarNaTabela(loginselecionado)}"/>
                            </h:panelGrid>
                        </p:panel>
                    </p:dialog>
                </h:form>
                <h:form id="deleteForm">
                    <p:confirmDialog id="deleteDg" message="Deseja deletar o usuário #{loginManagedBean.loginselecionado.nome} do sistema?" header="Deletar usuário" severity="alert" widgetVar="deleteCd">
                        <p:commandButton value="Sim" actionListener="#{loginManagedBean.excluirNaTabela(loginselecionado)}" onclick="deleteDg.close(); loginTb.update();">
                        </p:commandButton>
                        <p:commandButton  value="Não" onclick="deleteCd.close(); loginTb.update();" />
                    </p:confirmDialog>
                </h:form>
                <h:form id="tableForm">
                    <p:dataTable  value="#{loginManagedBean.loginLista}" widgetVar="loginTb" var="login">
                        <f:facet name="header">
                            <p:commandButton value="Cadastrar Usuário"  onclick="createDg.show()"/>
                            <p:outputPanel style="float: right;">
                                <h:outputText value="Procurar em Tudo:" />
                                <h:inputText id="globalFilter" onkeyup="loginTb.filter();" />
                            </p:outputPanel>
                        </f:facet>
                        <p:column headerText="Nome">
                            <h:outputText value="#{login.nome}"/>
                        </p:column>
                        <p:column headerText="Usuário">
                            <h:outputText value="#{login.username}"/>
                        </p:column>
                        <p:column headerText="Senha">
                            <h:outputText value="#{login.password}"/>
                        </p:column>
                        <p:column headerText="E-mail">
                            <h:outputText value="#{login.email}"/>
                        </p:column>
                        <p:column headerText="Perfil" sortBy="#{login.autorizacao}" >
                            <h:outputText value="#{login.autorizacao}"/>
                        </p:column>
                        <p:column headerText="#{login.enable()}" sortBy="#{login.enable}">
                            <h:outputText value="Habilitado" rendered="#{login.enable==true}"/>
                            <h:outputText value="Desabilitado" rendered="#{login.enable==false}"/>
                        </p:column>
                        <p:column>
                            <p:commandButton  value="Alterar" actionListener="#{loginManagedBean.adicionaselecionado(item)}" onclick="alterDg.show();"/>
                            <p:commandButton value="Excluir" actionListener="#{loginManagedBean.adicionaselecionado(item)}" onclick="deleteCd.show();" />
                        </p:column>
                    </p:dataTable>
                </h:form>
            </ui:define>
        </ui:composition>
    </h:body>
</html>

porem sem pegar nenhum valor ainda

tentei também colocar um action listener adicionando o item manualmente ...

Criado 4 de março de 2012
Ultima resposta 6 de mar. de 2012
Respostas 5
Participantes 3