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]