我想从数据表中选择一些行并对它们进行一些操作。表中的行表示应用程序的用户,操作是禁用它们。当调用禁用用户的方法时,所选用户的列表为空,因此不会产生任何更改。我按照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;
}
}
答案 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>