2017-03-03 5 views
1

データテーブルからいくつかの行を選択して、何らかの操作を行いたいとします。表の行はアプリケーションのユーザーを表し、アクションはそれらを無効にすることです。ユーザーを無効にする方法が選択されたユーザーのリストと呼ばれるときは空であり、変更は生成されません。私は素体ショーケースの例に従います。誰かがエラーを見つけるのを助けることができますか?複数の選択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

'selectedUsers = new ArrayList ()' –

+1

のように 'publicリストのような条件を作ることを忘れないでください。getSelectedUsers(){i f(selectedUsers == null){selectedUsers = new ArrayList (); } リターンselectedUsers; } ' –

+0

@ YagamiLightこれはうまくいかないようです。 – ronce96

答えて

1

はちょうどそれが次のようになります。フォーム内のあなたのdataTableを作るあなたの問題を解決するには:あなたがゲッターであなたのリストを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しないでください、私は少しあなたの質問を編集するので、SO recommande –