extendedDataList: selection not working
gessnerfl Oct 20, 2009 7:43 PMHi,
I try to create a UI which contains a extendedDataList with a detail screen below. When the user selects a table row, the information of this table row should be visible below the table.
The UI is implemented as follows:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="../../layout/template.xhtml"
xmlns:a4j="http://richfaces.org/a4j">
<ui:define name="content">
<h1>User Management</h1>
<rich:panel>
<f:facet name="header">
<h:outputText value="User List:" />
</f:facet>
<rich:toolBar height="18px" itemSeparator="line">
<rich:toolBarGroup>
<h:commandButton action="newUser.xhtml" value="Create User" alt="create a new user" />
<h:commandButton action="editUser.xhtml" value="Edit User" alt="edit selected user" />
</rich:toolBarGroup>
</rich:toolBar>
<rich:extendedDataTable id="userList" var="user" value="#{users}" rendered="#{not empty users}" sortMode="single"
selectionMode="single" selection="#{userList.selection}" rows="10" width="100%">
<rich:column label="Id" sortable="true" sortBy="#{user.userId}">
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{user.userId}" />
</rich:column>
<rich:column label="Username" sortable="true" sortBy="#{user.username}">
<f:facet name="header">
<h:outputText value="Username" />
</f:facet>
<h:outputText value="#{user.username}" />
</rich:column>
<rich:column label="Firstname" sortable="true" sortBy="#{user.firstname}">
<f:facet name="header">
<h:outputText value="Firstname" />
</f:facet>
<h:outputText value="#{user.firstname}" />
</rich:column>
<rich:column label="Lastname" sortable="true" sortBy="#{user.lastname}">
<f:facet name="header">
<h:outputText value="Lastname" />
</f:facet>
<h:outputText value="#{user.lastname}" />
</rich:column>
<rich:column label="Active" sortable="true" sortBy="#{user.enabled}">
<f:facet name="header">
<h:outputText value="Active" />
</f:facet>
<h:selectBooleanCheckbox id="Active" title="Active" value="#{user.enabled}" disabled="true" readonly="true" />
</rich:column>
<rich:column label="Technical User" sortable="true" sortBy="#{user.technicalUser}">
<f:facet name="header">
<h:outputText value="Technical User" />
</f:facet>
<h:selectBooleanCheckbox id="technicalUser" title="technicalUser" value="#{user.technicalUser}" readonly="true" disabled="true" />
</rich:column>
<a4j:support reRender="userDetails" action="#{userList.onSelect}" event="onSelectionChange" />
</rich:extendedDataTable>
</rich:panel>
<rich:panel id="userDetails">
<f:facet name="header">
<h:outputText value="User Details:" />
</f:facet>
<h:panelGrid columns="2">
<h:outputLabel value="Username:" for="username" style="font-weight:bold" />
<h:outputText id="username" value="#{userList.selectedUser.username}" />
</h:panelGrid>
</rich:panel>
</ui:define>
</ui:composition>The Backend Bean coding:
@Stateful
@Name("userList")
@Scope(ScopeType.CONVERSATION)
public class UserListCBean implements UserListCLocal {
@EJB
UserManagerLocal userManager;
@DataModel
private List<User> users;
@DataModelSelection("users")
private User selectedUser;
private SimpleSelection selection;
@Logger
Log log;
@Factory("users")
public void queryUserList() {
users = userManager.getAllUsers();
}
public User getSelectedUser() {
return selectedUser;
}
public void setSelectedUser(User selectedUser) {
this.selectedUser = selectedUser;
}
public void onSelect() {
log.info("Out", "Out");
if (getSelection() != null && getSelection().getKeys() != null) {
Iterator<Object> iterator = getSelection().getKeys();
while (iterator.hasNext()) {
Object key = iterator.next();
Integer i = (Integer) key;
selectedUser = users.get(i);
}
}
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public SimpleSelection getSelection() {
return selection;
}
public void setSelection(SimpleSelection selection) {
this.selection = selection;
}
@Destroy
@Remove
public void destroy() {}
}and also the Local interface of the backend bean.
@Local
public interface UserListCLocal {
public void destroy();
public void queryUserList();
public User getSelectedUser();
public void setSelectedUser(User selectedUser);
public void onSelect();
public List<User> getUsers();
public void setUsers(List<User> users);
public SimpleSelection getSelection();
public void setSelection(SimpleSelection selection);
}I assume that the a4j action is not executed.
I user Seam 2.1.2 with JBoss AS 5.0.1.
Thanks for you help!!
Best Regards
Florian