2017-03-03 1 views
1

데이터 테이블에서 일부 행을 선택하여 일부 조치를 취하고 싶습니다. 테이블의 행은 응용 프로그램 사용자를 나타내며 조치는 이들을 사용 불가능하게하는 것입니다. 사용자를 비활성화하는 방법을 호출하면 선택한 사용자 목록이 비어 있으므로 변경 사항이 생성되지 않습니다. 나는 프라임 사례 쇼케이스 예제를 따른다. someon이 오류를 찾는 데 도움이 될 수 있습니까?다중 선택 p : dataTable

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

like'selectedUsers = new ArrayList ()' –

+1

같은 조건을 만드는 것을 잊지 마라. public list getSelectedUsers() {i f (selectedUsers == null) {selectedUsers = new ArrayList (); } return selectedUsers; }' –

+0

@ YagamiLight 이것이 작동하지 않는 것 같습니다. – ronce96

답변

1

은 그냥 같이하는 형태로 내부에 데이터 테이블을 문제를 해결하려면 : 당신이 당신의 수완에 목록을 initialisate 필요

<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> 
+1

여기에 대답을 찾을 수 있습니다 답변으로 왜 그것을 upvoted하지 말고, 나는 또한 조금 recommande로 발을 만들어 귀하의 질문을 편집합니다 Logged –

관련 문제