[jboss-user] [JBoss Web Services] - RichFaces ExtendedDataTable not setting the Selection attribute

david hickman do-not-reply at jboss.com
Sun Dec 5 10:25:53 EST 2010


david hickman [http://community.jboss.org/people/david-brighton] created the discussion

"RichFaces ExtendedDataTable not setting the Selection attribute"

To view the discussion, visit: http://community.jboss.org/message/574386#574386

--------------------------------------------------------------
Hi
I am using Richfaces  richfaces-ui-3.3.3.Final with jojarra-2.0.3 Core JSF and Jave 1.6 running in tomcat 6.0.29.

I am populating the extendedDataTable using the data model shown below but when I select an entry, the backing bean method is being called but the selection variable is being set but with no keys, any help would be appreciated:


// snippet from jsp
             <r:simpleTogglePanel>    
                
                    <f:facet name="header">
                        <h:outputText value="User Search Results"/>
                    </f:facet>
                    
                    <a:outputPanel id="userSearchResultsPanel" >

                        <r:extendedDataTable id="userTable"
                                     height="200px"
                                       value="#{userBean.dataModel}"
                                       var="user"
                                       selectionMode="single" 
                                       selection="#{userBean.searchSelection}">
                                  <r:column sortOrder="ASCENDING"  >
                                      <f:facet name="header">
                                          <h:outputText value="User Name" />
                                      </f:facet>
                                      <h:outputText value="#{user.userName}" />
                                  </r:column>
                                  <r:column sortOrder="ASCENDING"   >
                                      <f:facet name="header">
                                          <h:outputText value="First Name" />
                                      </f:facet>
                                      <h:outputText value="#{user.firstName}" />
                                  </r:column>
                                  <r:column sortOrder="ASCENDING"  >
                                      <f:facet name="header">
                                          <h:outputText value="Surname" />
                                      </f:facet>
                                      <h:outputText value="#{user.surName}" />
                                  </r:column>
                                  <r:column sortOrder="ASCENDING">
                                      <f:facet name="header">
                                          <h:outputText value="Cost Center" />
                                      </f:facet>
                                      <h:outputText value="#{user.costCenter}" />
                                  </r:column>
                                  
                                  <a:support event="onselectionchange"
                                             reRender="userDetailPanel" 
                                             action="#{userBean.identifySelectedUser}" />
                          </r:extendedDataTable>

                          <r:spacer height="10px" />                      
                          
                    </a:outputPanel>
                </r:simpleTogglePanel>

// Data Provider
package util;

import java.util.*;
import vo.User;

import org.apache.log4j.Logger;
import org.richfaces.model.DataProvider;

public class UserTableDataProvider implements DataProvider{
    
    private Logger log = Logger.getLogger( "UserTableDataProvider: " );
    
    private Map<UUID, UIUser>        dataTable;
    private List<UIUser>            dataList;
    
    public UserTableDataProvider( List<User> users ) {
        
        dataTable = new HashMap<UUID,UIUser>();
        dataList  = new ArrayList<UIUser>( users.size());
        for ( User user : users ) {
            UIUser uiUser = new UIUser( user );
            dataTable.put( uiUser.getId(), uiUser);
            dataList.add( uiUser );
        }

    }
    /**
     * 
     */
    public Object getItemByKey( Object key ) {
        return dataTable.get(( String)key );
    }
    /**
     * 
     */
    public List getItemsByRange( int start, int end ) {
        return dataList.subList( start, end );
    }
    /**
     * 
     */
    public Object getKey( Object user ) {
        return ((UIUser)user).getId();
    }
    /**
     * 
     */
    public int getRowCount() {
        return dataList.size();
    }
}

// Backing Bean
package beans;

import org.apache.log4j.*;
import org.richfaces.model.selection.SimpleSelection;
import org.richfaces.model.ExtendedTableDataModel;
import util.UserTableDataProvider;

import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;


import exception.UserException;
import exception.BaseRuntimeException;
import vo.User;
import service.UserService;

public class UserBean extends BaseBean {

    private Logger log = Logger.getLogger( "UserBean: " );
    
    //////////////////////////////////////////////////////////
    // Injected properties
    //////////////////////////////////////////////////////////
    private UserService userService;
    
    //////////////////////////////////////////////////////////
    // Private static data
    //////////////////////////////////////////////////////////
    private final static String COST_CENTER     = "CC";
    private final static String SURNAME         = "SN";
    private final static String USERNAME        = "UN";
    
    //////////////////////////////////////////////////////////
    // Private member variables
    //////////////////////////////////////////////////////////
    // basic attributes
    private String                  userName;
    private String                  password;
    private String                  userType;    
    private String                    email;
    private String                    firstName;
    private String                    surname;
    private String                  costCenter;
    private HashMap                 userTypes;
    private String                    active;
    private List<User>               users;

    // search attributes
    private String                    searchType;
    private String                    searchCriteria;


    private SimpleSelection        searchSelection;
    private ExtendedTableDataModel dataModel;
    
    
    // default bean constructor
    public UserBean() {
        users = new ArrayList<User>();
    }
    
    
    //////////////////////////////////////////////
    // Bean property accessor methods
    //////////////////////////////////////////////
    public String getUserName() {
        return userName;
    }
    
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    public String getUserType() {
        return userType;
    }
    public void setUserType(String userType) {
        this.userType = userType;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getCostCenter() {
        return costCenter;
    }

    public void setCostCenter(String costCenter) {
        this.costCenter = costCenter;
    }

    public HashMap getUserTypes() {
        return userTypes;
    }


    public void setUserTypes(HashMap userTypes) {
        this.userTypes = userTypes;
    }


    public String getActive() {
        return active;
    }


    public void setActive(String active) {
        this.active = active;
    }


    public String getSearchType() {
        return searchType;
    }


    public void setSearchType(String searchType) {
        this.searchType = searchType;
    }


    public String getSearchCriteria() {
        return searchCriteria;
    }


    public void setSearchCriteria(String searchCriteria) {
        this.searchCriteria = searchCriteria;
    }

    public SimpleSelection getSearchSelection() {
        return searchSelection;
    }


    public void setSearchSelection(SimpleSelection searchSelection) {
        log.info("UserBean.setSearchSelection");
        this.searchSelection = searchSelection;
    }

    public ExtendedTableDataModel getDataModel() {

        dataModel = new ExtendedTableDataModel( new UserTableDataProvider( users ));
        
        return dataModel;
    }


    public void setDataModel(ExtendedTableDataModel dataModel) {
        this.dataModel = dataModel;
    }


    //////////////////////////////////////////////////////////
    // User Service methods
    //////////////////////////////////////////////////////////
    public void userSearch() {


        String status = validateSearchCriteria();
        
        users = new ArrayList();
        try {
            if ( searchType.equals(COST_CENTER )) {
                
                users = userService.getUsersByCostCenter( searchCriteria);
            }
            else if ( searchType.equals(SURNAME )) {
                
                users = userService.getUsersBySurname( searchCriteria );
            }
            else if ( searchType.equals(USERNAME)) {
                
                users.add( userService.getUser( searchCriteria ));
            }
        }
        catch ( UserException ue ) {
            if ( searchType.equals(COST_CENTER )) {
                addErrorMessage("userSearch", "Failed to retrieve users for Cost Center " + searchCriteria );
            }
            else if ( searchType.equals(SURNAME )) {
                addErrorMessage("userSearch", "Failed to retrieve users for Surname " + searchCriteria );
            }
            else if ( searchType.equals(USERNAME)) {
                addErrorMessage("userSearch", "Failed to retrieve users for Username " + searchCriteria );
            }            
            
        }
    }
    
    // identify selected user
    public void identifySelectedUser() {
        
        if ( searchSelection != null ) {
            log.info("Selection: " + searchSelection.size() );
            Iterator iterator = searchSelection.getKeys();
            while ( iterator.hasNext() ) {
                Object key = iterator.next();
            }
        }
    }
    
    // User Detail
    public void userDetail() {
        
    }
    //////////////////////////////////////////////////////////
    // IOC methods
    //////////////////////////////////////////////////////////
    public void setUserService( UserService userService ) {
        this.userService = userService;
    }
    //////////////////////////////////////////////////////////
    // Private methods
    //////////////////////////////////////////////////////////
    // searchCriteria
    private String validateSearchCriteria() {
        String status = "ok";
        
        if ( !validString(searchType) ) {
            addErrorMessage("userSearch","Search Type is required");
            status = "error";
        }
        if ( !validString(searchCriteria) ) {
            addErrorMessage("userSearch","Search Criteria is required");
            status = "error";
        }
        
        return status;
    }
    // Bean data
    private String validateData( ) {
        
        String status = "ok";

        if ( userName == null || userName.equals("")) {
            addErrorMessage("userSearch", "User Name is required");
            status = "error";
        }
        if ( !validString(password) ) {
            addErrorMessage("userSearch", "Password is required");
            status = "error";
        }
        if ( !validString(firstName) ) {
            addErrorMessage("userSearch", "First Name is required");
            status = "error";
        }        
        if ( !validString(surname) ) {
            addErrorMessage("userSearch", "Surname is required");
            status = "error";
        }        
        if ( !validString(email)) {
            addErrorMessage("userSearch", "Email is required");
            status = "error";
        }        
        if ( !validString(costCenter )) {
            addErrorMessage("userSearch", "Cost Center is required");
            status = "error";
        }        
        return status;    
    }

    // validString
    private boolean validString( String str ) {
        if ( str == null || str.equals("" ))
            return false;
        return true;
    }

}

// UI User class
package util;

import vo.User;
import java.util.UUID;

/**
 * 
 * This class encapsulates a standard USER object but
 * also includes a UUID for use by UI objects ed.ExtendedDataTable
 * 
 * @author davidhickman
 *
 */
public class UIUser extends User {

    /////////////////////////////////////////////////////
    // Private data
    /////////////////////////////////////////////////////
    private UUID    id;


    public  UIUser( User user ) {
        
        this.setUserName(user.getUserName());
        this.setPassword(user.getPassword());
        this.setUserType(user.getUserType());
        this.setEmail(user.getEmail());
        this.setFirstName(user.getFirstName());
        this.setSurName(user.getSurName());
        this.setCostCenter(user.getCostCenter());
        this.setActive(user.getActive());
        this.id = UUID.randomUUID();
        
    }

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }


}
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/574386#574386]

Start a new discussion in JBoss Web Services at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2044]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20101205/9cd6646f/attachment-0001.html 


More information about the jboss-user mailing list