データテーブルからいくつかの行を選択して、何らかの操作を行いたいとします。表の行はアプリケーションのユーザーを表し、アクションはそれらを無効にすることです。ユーザーを無効にする方法が選択されたユーザーのリストと呼ばれるときは空であり、変更は生成されません。私は素体ショーケースの例に従います。誰かがエラーを見つけるのを助けることができますか?複数の選択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;
}
}
'selectedUsers = new ArrayList()' –
のように 'publicリストのような条件を作ることを忘れないでください。getSelectedUsers(){i f(selectedUsers == null){selectedUsers = new ArrayList (); } リターンselectedUsers; } ' –
@ YagamiLightこれはうまくいかないようです。 – ronce96