I have gotten rid of the "Argument Type Mismatch"
problem.
I found that if I use UISelectMany, user selections
from a list box will be in an Object[].
But, I got another runtime error:
"EvaluationException: Error getting property
'dataFile' from bean of type
actions.FileManagementBean:
java.lang.NullPointerException'
Maybe people could help me better now. I have the
getter and setter for the property 'dataFile' in my
backing bean. Let me repeat my code. In my JSP, I
create a list box:
[code]
<h:selectManyListbox
binding="#{fileManagementBean.dataFile}" size="7" >
<f:selectItems
value="#{fileManagementBean.dataFileItems}"/>
</h:selectManyListbox>
[/code]
And this is my backing bean:
[code]
public class FileManagementBean
{
private UISelectMany dataFileItems;
protected List dataFile;
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 Object[] getDataFile()
{
return dataFile.toArray();
}
public void setDataFile( Object[] newDataFile )
{
int len = 0;
if ( null == newDataFile ||
( len = newDataFile.length) == 0)
{
return;
}
dataFile.clear();
dataFile = new ArrayList( len );
for ( int i = 0; i < len; i++ )
{
dataFile.add( newDataFile[i] );
}
}
public UISelectMany getDataFileItems()
{
return dataFileItems;
}
}
[/code]
--- Caroline Jen <[EMAIL PROTECTED]> wrote:
> 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 <[EMAIL PROTECTED]> 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 <[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?
>
=== message truncated ===
__________________________________
Yahoo! Music Unlimited
Access over 1 million songs. Try it free.
http://music.yahoo.com/unlimited/