Did you take a look at the html source (with String[])?
It should have multiple="multiple" in the <select>
On Wed, 19 Jan 2005 20:54:05 -0600, Will Stranathan
<[EMAIL PROTECTED]> wrote:
I promise I google'd first....
I'm trying to use a multiple-select select box, for example:
<html:select multiple="true" property="bar" size="5">
<html:option value="1">One</html:option>
<html:option value="2">Two</html:option>
<html:option value="3">Three</html:option>
<html:option value="4">Four</html:option>
</html:select>
And I've tried backing my form bean with String[] AND with an
ArrayList.
When I try to use a String[] as the backing, the form displays, but
when I submit, I get an argument type mismatch:
DEBUG 2005-01-19 10:51:56
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:876)
setProperty([EMAIL PROTECTED], bar, [2,4,8])
DEBUG 2005-01-19 10:51:56
org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:418)
Convert string '2' to class 'java.lang.String'
DEBUG 2005-01-19 10:51:56
org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:426)
Using converter
[EMAIL PROTECTED]
DEBUG 2005-01-19 10:51:56
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1756)
setSimpleProperty: Invoking method public void
com.boa.cis.portal.forms.FooForm.setBar(java.lang.String[]) with
value
2 (class java.lang.String)
ERROR 2005-01-19 10:51:56
org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1777)
Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
It looks like it's iterating through the values, calling a simple
String set on each one.
So I tried backing with an array list, like so:
package com.boa.cis.portal.forms;
import java.util.ArrayList;
import org.apache.struts.action.ActionForm;
public class FooForm extends ActionForm {
private ArrayList<String> bar;
public FooForm() {
bar = new ArrayList<String>();
}
public String getBar(int index) {
return this.bar.get(index);
}
public String[] getBar() {
return (String[])this.bar.toArray();
The above line should be "return (String[]) this.bar.toArray(new
String[this.bar.size()]);" to avoid ClassCastException
}
public void setBar(int index, String bar) {
this.bar.set(index,bar);
}
public void setBar(String[] bar) {
this.bar.clear();
for (int i = 0; i < bar.length; i++) {
this.bar.set(i,bar[i]);
}
}
public void reset(org.apache.struts.action.ActionMapping mapping,
javax.servlet.http.HttpServletRequest request) {
bar = new ArrayList<String>();
super.reset(mapping, request);
} }
But that won't even render the form - I get a ClassCastException:
ERROR 2005-01-19 10:58:58
org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:918)
ServletException in 'foo.jsp': Getter for property bar threw
exception: java.lang.ClassCastException: [Ljava.lang.Object;
javax.servlet.ServletException: Getter for property bar threw
exception: java.lang.ClassCastException: [Ljava.lang.Object;
at
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
I'm using Struts 1.2.6.
From all I can tell of the error reporting, is that possibly the
Struts taglib is not using the multiple="true" property the way it
ought, so it doesn't think it's supposed to be looking for an array
type from the getter method on my form bean.
Has anybody had any success with this?
Thanks
Will
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]