template showcase plantillas gratis define jsf primefaces facelets

jsf - showcase - ui insert



DataModel debe implementar org.primefaces.model.SelectableDataModel cuando la selección esté habilitada. (3)

Alternativamente a rowKey puede envolver sus datos en un modelo personalizado que realmente implementa org.primefaces.model.SelectableDataModel . Esto es útil si

  • todas sus clases tienen el mismo tipo de @Id (por ejemplo, una long ) y pueden implementar la misma interfaz (por ejemplo, EjbWithId )
  • desea agregar funcionalidades adicionales a sus datos que no son específicos del dominio y no pertenecen, por ejemplo, el User .

La interfaz puede ser algo como esto:

public interface EjbWithId { public long getId(); public void setId(long id); }

A continuación, se puede utilizar una implementación genérica de SelectableDataModel para todas sus clases:

public class PrimefacesEjbIdDataModel <T extends EjbWithId> extends ListDataModel<T> implements SelectableDataModel<T> { public PrimefacesEjbIdDataModel(List<T> data) { super(data); } @Override public T getRowData(String rowKey) { List<T> list = (List<T>) getWrappedData(); for(T ejb : list) { if(ejb.getId()==(new Integer(rowKey))){return ejb;} } return null; } @Override public Object getRowKey(T item) {return item.getId();} }

En tu @ManagedBean :

private PrimefacesEjbIdDataModel<User> dmUser; //+getter dmUser = new PrimefacesEjbIdDataModel<User>(administrationProjectFinal.getUserList());

Estoy intentando crear una DataTable con selección de múltiples filas, pero me sale un error. Aquí está el enlace del tutorial http://www.primefaces.org/showcase/ui/datatableRowSelectionMultiple.jsf :

Aquí está mi xhtml:

<p:dataTable border="1" value="#{projectAdminisrationMB.projectNoUsersList}" var="userObj" selection="# {projectAdminisrationMB.selectedUsers}" selectionMode="multiple" rowIndexVar="rowIndex"binding="#{table2}"> <p:column id="column3"> <f:facet name="header"> <h:outputText value=" user "></h:outputText> </f:facet> <h:outputText value="#{userObj.name}"/> / <h:outputText value="#{userObj.lastName}"></h:outputText> &nbsp; <h:outputText value="#{userObj.firstName}"></h:outputText> </p:column> <f:facet name="footer"> <p:commandButton id="addProjectUser" value=" Add " onclick="dlg1.show()" /> <p:commandButton id="deleteProjectUser" value=" Delete " /> </f:facet> </p:dataTable>

Manage Bean:

@ManagedBean @SessionScoped public class ProjectAdminisrationMB implements Serializable { private static final long serialVersionUID = 1L; private String projectName; private List <User> projectUsersList; private List<User> projectNoUsersList; private List<User> selectedUsers; private String projectAdmin; public ProjectAdminisrationMB() { super(); AdministrationProjectFinal administrationProjectFinal =new AdministrationProjectFinal(); this.projectUsersList=administrationProjectFinal.getUserList(); this.projectNoUsersList=administrationProjectFinal.getNotUserList(); } public String getProjectName() { return projectName; } public void setProjectName(String projectName) { this.projectName = projectName; } public List<User> getProjectUsersList() { return projectUsersList; } public void setProjectUsersList(List<User> projectUsersList) { this.projectUsersList = projectUsersList; } public String getProjectAdmin() { return projectAdmin; } public void setProjectAdmin(String projectAdmin) { this.projectAdmin = projectAdmin; } public List<User> getProjectNoUsersList() { return projectNoUsersList; } public void setProjectNoUsersList(List<User> projectNoUsersList) { this.projectNoUsersList = projectNoUsersList; } public List<User> getSelectedUsers() { return selectedUsers; } public void setSelectedUsers(List<User> selectedUsers) { this.selectedUsers = selectedUsers; } }

estoy recibiendo este error:

javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.....


Puede obtener este error si intenta agregar un nuevo elemento a la lista subyacente y olvida asignar un valor a rowKey de ese nuevo elemento.


simplemente agregue este atributo rowKey a la etiqueta datatable:

<p:dataTable border="1" value="#{projectAdminisrationMB.projectNoUsersList}" var="userObj" rowKey="#{userObj.name}"selection="#{projectAdminisrationMB.selectedUsers}" selectionMode="multiple" rowIndexVar="rowIndex" binding="#{table2}">