多选p:dataTable

时间:2017-03-03 09:28:45

标签: primefaces

我想从数据表中选择一些行并对它们进行一些操作。表中的行表示应用程序的用户,操作是禁用它们。当调用禁用用户的方法时,所选用户的列表为空,因此不会产生任何更改。我按照primefaces展示的例子。有人可以帮助找到错误吗?

mypage.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/templates/template-administrador.xhtml">

    <ui:define name="cuerpo">
            <p:dataTable id="tablaUsuarios" var="usuario"
                value="#{controller.users}" border="1" selectionMode="multiple"
                selection="#{controller.selectedUsers}" rowKey="#{usuario.id}">
                <p:column>
                    <f:facet name="header">ID</f:facet>#{usuario.id}</p:column>
                <p:column>
                    <f:facet name="header">Email</f:facet>#{usuario.email}</p:column>
                <p:column>
                    <f:facet name="header">#{msgs.esAdministrador}</f:facet>#{usuario.isAdmin}</p:column>
                <p:column>
                    <f:facet name="header">#{msgs.usuarioTabla}</f:facet>#{usuario.login}</p:column>
                <p:column>
                    <f:facet name="header">#{msgs.estado}</f:facet>#{usuario.status}</p:column>

                <f:facet name="footer">
                    <p:commandButton process="tablaUsuarios"
                        value="Eliminar"
                        action="#{controller.eliminarUsuarios}"/>
                </f:facet>
            </p:dataTable>
    </ui:define>

</ui:composition>

负责执行动作的豆就是这个。

ManagedBean.java

    package uo.sdi.presentation;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import uo.sdi.business.AdminService;
import uo.sdi.business.Services;
import uo.sdi.business.exception.BusinessException;
import uo.sdi.dto.User;

@ManagedBean(name = "controller")
@ViewScoped
public class ControllerBean implements Serializable {
    private static final long serialVersionUID = 55555L;

    private String login, password;

    private User user;// Usuario que inicia la sesion en la aplicacion
    private List<User> users;// Lista de usuarios que tiene el administrador
    private List<User> selectedUsers;// Usuarios seleccionados de la lista
                                // anterior para ser eliminados

    public String getLogin() {
        return login;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public List<User> getSelectedUsers() {
        return selectedUsers;
    }

    public void setSelectedUsers(List<User> selectedUsers) {
        this.selectedUsers = selectedUsers;
    }       

    public String validateUser() {

        String resultado;
        if (this.user != null)
            resultado = "error";
        else
            try {
                this.user = Services.getUserService().findLoggableUser(login,
                        password);
                if (this.user.getIsAdmin()) {
                    users = Services.getAdminService().findAllUsers();
                    resultado = "admin";
                } else
                    resultado = "usuario";

            } catch (BusinessException e) {
                // e.printStackTrace();
                resultado = "error";
            }    
        return resultado;
    }    

    public String eliminarUsuarios() {
        String resultado = "exito";
        AdminService service = Services.getAdminService();
        try {
            for(User user : selectedUsers)
                service.disableUser(user.getId());

            users = service.findAllUsers();

        } catch (BusinessException e) {
            resultado = "fracaso";
            e.printStackTrace();
        }

        return resultado;
    }

    public String listarUsuarios() {    
        String resultado = "exito";    
        try {
            users = Services.getAdminService().findAllUsers();
        } catch (BusinessException e) {
            resultado = "error";
            e.printStackTrace();
        }    
        return resultado;
    }
}

1 个答案:

答案 0 :(得分:1)

要解决您的问题,只需在表单中创建dataTable,它将如下所示:

<h:form >
 <p:dataTable id="tablaUsuarios" var="usuario" ...>

 ....
  <f:facet name="footer">
                <p:commandButton process="@form"
                    value="Eliminar"
                    action="#{controller.eliminarUsuarios}"/>
            </f:facet>
</h:form>