Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to populate the right side of a richfaces picklist?

I am using a Richfaces' picklist and I want to populate the right-side panel with a list of SelectItems from my backing bean.

Populating the left-side is not a problem from the backing bean, however, the right hand side is problematic.

This is what I currently have

<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false">
    <f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>

EDIT:

So I have roles 'a', 'b', 'c', and 'd'.

The user has roles 'a' and 'd', so 'a' and 'd' should be on the right-side panel and 'b' and 'c' should be on the left-side panel.

EDIT:

Further explanation.

I have three lists for the user.

  1. All posible roles (a thru d)
  2. All roles the user is part of (a and d)
  3. All roles the user is NOT part of (b and c)

All lists have the data type ArrayList<SelectItem>.

I need the capability to move individual roles between list number 1 and list number 2 and then save the new set of roles. I thought the picklist would be the best richfaces object for the job.

like image 873
Berek Bryan Avatar asked May 08 '09 13:05

Berek Bryan


1 Answers

It seems that I found the solution.

<rich:pickList value="#{aBean.rightSideValues}"> 
        <f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
  • "#{aBean.rightSideValues}" should point to the list or array of objects. With these values right side of the pick list will be populated.

  • #{aBean.leftSideValues} should point to the list of the SelectItem object.

ONE NOTICE -- SelectItem object MUST BE constructed with objects from the "#{aBean.rightSideValues}".

Example.

class ABean{
   ...
   List<SomeObject> getRightSideValues(){
    ...
  }

   List<SelectItem> getLeftSideValues(){
      List<SomeObjects> someObjects = getAllAvailableObjects();
      List<SelectItem> sItems = new ArrayList<SelectItem>(); 
      for(SomeObject sObj : someObjects){
          SelectItem sItem = new SelectItem(sObj, sObj.toString());
          sItems.add(sItem);
      }
      return sItems;
}

Notice that SelectItem takes first argument and this argument is the reference to the SomeObject. In the internals rich faces will compare objects from the "#{aBean.rightSideValues}" with objects from the #{aBean.leftSideValues} with help of the method

SomeObject.equals()

like image 125
indegro Avatar answered Oct 05 '22 08:10

indegro