Yes, it did.  Which is why the detailed logging shows:
setProperty([EMAIL PROTECTED], bar, [2,4,8])

I had selected mutliple items.

w

On Thu, 20 Jan 2005 00:22:56 -0600
 Kishore Senji <[EMAIL PROTECTED]> wrote:
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]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to