I am having a problem with a map-backed form and html:select with multiple="true".  
Would appreciate any help/ideas.

I need to display a set of "html:select" lists. The number of lists is user-defined 
(based on database data) and each select list
must allow more than one choice to be selected.

I settled on using a map property in the form bean as the manual suggests. Everything 
works great on initial display, furthermore I
am selecting all values which will be the normal use case for the user.

However, upon return, only a single value is passed in. Should I be using the "value" 
attribute on the html:select tag? I cannot
seem to figure out how to make it work as an array.

Here are the relevant struts/JSTL tags.

    <c:forEach items="${form1.choiceList}" var="valueArray">
    <td style="text-align: center;">
      <c:set var="cList" value="${Collection_charChoices[choiceArray.key]}"/>
      <html-el:select name="form1" property="choiceLists(${choiceArray.key})" size="6" 
multiple="true"
value="choiceLists($choiceArray.key)">
        <html-el:options collection="cList" property="id" labelProperty="name"/>
      </html-el:select>
    </td>
    </c:forEach>

Here is a code snipped I use to inspect the map as it comes in (afer having been 
successfully sent out and displayed with all values
selected):

        Set keySet = map.keySet();
        Iterator ik = keySet.iterator();
        while (ik.hasNext()) {
            Object key = (String)ik.next();
            log.debug("showMap - mapKey='"+key.toString()+"'");
            Object value = map.get(key);
            if ( value instanceof String[] ) {
                String[] valArray = (String[]) value;
                for (int i=0;i<valArray.length;i++)
                    log.debug("showMap -   valArray["+i+"]='"+valArray[i]+"'");
            } else {
                    log.debug("showMap -   value instanceof 
'"+value.getClass().getName()+"'");
                    log.debug("showMap -   value='"+value.toString()+"'");
            }
        }

It shows a simple String object (the first choice in the options list, actually) 
rather than the String[] that was sent out.

Thank you again - Richard


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

Reply via email to