Mmmh, if I understood you ok at the beginning we have two objectives:

#1 - Have a list filled dinamically with SelectItem objects
#2 - Some of the elements of the list are pre-selected when the page loads.

To do #1 we need to use the f:selectItems components with a value that
points to an array/List of SelectItem objects in the backing bean.
Something like this:

[jsp]

<h:selectManyListBox>
  <f:selectItems value="#{fileManagementBean.listOfSelectItems}"/>
</h:selectManyListBox>

[/jsp]

Notice that I have used the value attribute of the selectItems
component, instead of the binding... The backing bean code should be,
in this case:

[code]

public class FileManagementBean
{
       private List listOfSelectItems

       public FileManagementBean()
       {
               listOfSelectItems = new ArrayList();
               SelectItem file = new SelectItem( "file1", "Data
File No. 1");
               listOfSelectItems.add( file );

               SelectItem file2 = new SelectItem( "file2", "Data File No. 2");
               listOfSelectItems.add( file2 );
.....
.....
       }

       public List getListOfSelectItems() {
               return dataFileItems;
       }

     public void setListOfSelectItems(List listOfSelectItems) {
               this.listOfSelectItems = listOfSelectItems;
       }
}

[/code]

After doing this, we should have in our page a list with two items,
none of them pre-selected.
So, to do #2, we just need to pass an array of the values for the
items we want to be chosen to the selectManyListBox, like this:

[jsp]

<h:selectManyListBox value="#{fileManagementBean.preSelection}">
  <f:selectItems value="#{fileManagementBean.listOfSelectItems}"/>
</h:selectManyListBox>

[/jsp]

[code]

public class FileManagementBean
{

public class FileManagementBean
{
       private List listOfSelectItems
       private String[] preSelection;

       public FileManagementBean()
       {
               listOfSelectItems = new ArrayList();
               SelectItem file = new SelectItem( "file1", "Data
File No. 1");
               listOfSelectItems.add( file );

               SelectItem file2 = new SelectItem( "file2", "Data File No. 2");
               listOfSelectItems.add( file2 );

               // pre-selection
              preSelection = new String[] {"file2"}; // file2 is pre-selected
.....
.....
       }

       public String[] getPreSelection() {
               return dataFileItems;
       }

     public void setPreSelection(String[] preSelection) {
               this.preSelection = preSelection;
       }

....
}

}

[/code]

Hope that helps.... :-)

Bruno


2005/10/11, Caroline Jen <[EMAIL PROTECTED]>:
> Sorry, I am completely confused.
>
> OKay, here is my JSP:
>
> [code]
>          <h:selectManyListbox
>  binding="#{fileManagementBean.dataFile}" size="7" >
>              <f:selectItems
>  value="#{fileManagementBean.dataFileItems}"/>
>          </h:selectManyListbox>
> [/code]
>
> In my backing bean, I have changed String[] dataFile
> to SelectItem[] dataFile.
>
> <f:selectItems> cannot bind to UISelectMany?  The
> dataFileItems is of UISelectMany type in my backing
> bean.  What should I do?
>
> In your code provided:
> <f:selectItems
> value="#{fileManagementBean.listOfSelectItems}/>
>
> How do I do it?
>
>
> --- Bruno Aranda <[EMAIL PROTECTED]> wrote:
>
> > Your code is not ok. You are binding the faces
> > components to wrong
> > types: h:selectManyListbox cannot be bound to
> > String[] and
> > f:selectItems cannot be bound to an instance of
> > UISelectMany....
> >
> > The best pattern here is to pass an Array/List of
> > SelectItem objects
> > to the value of your f:selectItems component, like
> > this:
> >
> > <h:selectManyListbox
> > value="#{fileManagementBean.dataFile}">
> >     <f:selectItem
> > value="#{fileManagementBean.listOfSelectItems}/>
> > </h:selectManyListbox>
> >
> > And also note that to have some values selected when
> > the page is
> > loaded you have to use the @value attribute.
> >
> > Regards,
> >
> > Bruno
> >
> > 2005/10/11, Caroline Jen <[EMAIL PROTECTED]>:
> > > I used the UISelectItem to set its value to the
> > > SelectItem (I have many SelectItme).  Then,  I
> > added
> > > each UISelectItem to the UISelectMany .  When I
> > > displayed a list box, I got the runtime error:
> > >
> > > "IllegalArgumentException: argument type mismatch"
> > >
> > > In my JSP, I create a list box for multiple
> > > selections:
> > >
> > > [code]
> > >         <h:selectManyListbox
> > > binding="#{fileManagementBean.dataFile}" size="7"
> > >
> > >             <f:selectItems
> > > value="#{fileManagementBean.dataFileItems}"/>
> > >         </h:selectManyListbox>
> > > [/code]
> > >
> > > Therefore, the "dataFileItems" is of type
> > UISelectMany
> > > that has elements of type UISelectItem.  The
> > multiple
> > > selections that users make will be in a String
> > array:
> > > String[] dataFile.  Did I mess up anything here?
> > My
> > > backing bean code is like:
> > >
> > > [code]
> > > .....
> > > .....
> > > public class FileManagementBean
> > > {
> > >         private String[] dataFile;
> > >         private UISelectMany dataFileItems;
> > >
> > >         public FileManagementBean()
> > >         {
> > >                 dataFileItems = new
> > UISelectMany();
> > >                 UISelectItem item = new
> > UISelectItem();
> > >
> > >                 SelectItem file = new SelectItem(
> > "file1", "Data
> > > File No. 1");
> > >                 item.setValue( file );
> > >                 dataFileItems.getChildren().add(
> > item );
> > >                 file = new SelectItem( "file2",
> > "Data File No. 2");
> > >                 item.setValue( file );
> > >                 dataFileItems.getChildren().add(
> > item );
> > > .....
> > > .....
> > >         }
> > >
> > >         public String[] getDataFile() {
> > >                 return dataFile;
> > >         }
> > >
> > >         public void setDataFile( String[] dataFile
> > ) {
> > >                 this.dataFile = dataFile;
> > >         }
> > >
> > >         public UISelectMany getDataFileItems() {
> > >                 return dataFileItems;
> > >         }
> > > }
> > > [/code]
> > >
> > >
> > >
> > >
> > > __________________________________
> > > Yahoo! Mail - PC Magazine Editors' Choice 2005
> > > http://mail.yahoo.com
> > >
> >
>
>
>
>
> __________________________________
> Yahoo! Music Unlimited
> Access over 1 million songs. Try it free.
> http://music.yahoo.com/unlimited/
>

Reply via email to