views:

2608

answers:

2

There is a select dropdown and I want to add "No selection" item to the list wich should give me 'null' when submitted. I'm using SimpleFormController derived controller.

protected Map referenceData(HttpServletRequest httpServletRequest, Object o, Errors errors) throws Exception {
    Map<String, Object> map = new HashMap<String, Object>();

    map.put("countryList", Arrays.asList(Country.values()));

    return map;
}

And the jspx part is

<form:select path="country" items="${countryList}" title="country"/>

One possible solution seems to be in adding a null value to the beginning of the list and then using a custom PropertyEditor to disply this 'null' as 'No selection'. Is there a better solution?

@Edit: I have solved this with a custom validation annotation which checks if the selected value is "No Selection". Is there a more standard and easier solution?

+3  A: 

One option:

<form:select path="country" title="country" >
     <option value="">&nbsp;</option>
     <options items="${countryList}" />
</form>
JacobM
Thanks! Looks like what I was looking for. Will check it out.
axk
A: 

I don't think you should need a property editor for this. If the "blank" option is first in the list, and the tag that outputs the list doesn't mark any of them as selected, then the browser should select the first, "blank" one automatically.

When you submit the form, try and work it so that the "blank" value is bound to your command as a null, which might happen automatically, depending on the type.

skaffman