myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Caroline Jen <jiapei_...@yahoo.com>
Subject Re: UISelectMany and Argument Type Mismatch
Date Tue, 11 Oct 2005 15:30:56 GMT
Hi, I had known how to create selectManyListbox.  Two
weeks before I posted my question, I had successfully
used a List of SelectItem to create a list box.  I do
not want to have pre-selected items when the web page
is loaded into the browser.

My problem occurred when I changed the dataFileItems
from List to UISelectMany, I started getting "argument
type mismatch".  

<h:selectManyListbox
binding="#{fileManagementBean.dataFile}" size="7" >
    <f:selectItems
value="#{fileManagementBean.dataFileItems}"/>
</h:selectManyListbox>

I am working on how to resolve my current problem.

Besides, someone advised that "dataFile" should be of
type SelectItem[].  Therefore, I changed the type of
the "dataFile" from String[] to SelectItem[].  I still
have argument type mismatch problem.

--- Bruno Aranda <brunoaranda@gmail.com> wrote:

> 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 <jiapei_jen@yahoo.com>:
> > 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 <brunoaranda@gmail.com> 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 <jiapei_jen@yahoo.com>:
> > > > 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:
> > > >
> 
=== message truncated ===



		
__________________________________ 
Yahoo! Music Unlimited 
Access over 1 million songs. Try it free.
http://music.yahoo.com/unlimited/

Mime
View raw message