14.4.5.3.2. 选择输入域
有四种用于在HTML表单中生成通用选择输入框的宏。
formSingleSelect
formMultiSelect
formRadioButtons
formCheckboxes
每个宏都将接受一个由选项值和选项标签的集合构成的Map,其中选项值和其标签可以相同。
下面展示了一个在FTL中使用radio按钮的例子。表单支撑对象(form backing
object)提供了一个默认值'London',所以该域不需要校验。当渲染表单时,整个待展现的城市列表由模型对象的'cityMap'属性以引用数据的方式提供。
... Town:
"command.address.town", cityMap, ""
/>
这将产生一行radio按钮――
cityMap
中一个值对应一个按钮,并以""分隔。没有额外的属性,因为宏的最后一个参数不存在。cityMap中所有的key-value都使用String类型值。map中的key用作输入域的值(将被作为请求参数值提交到后台),value用作显示给用户的标签。上述示例中,表单支撑对象提供了一个默认值以及三个著名城市作为可选值,它产生的HTML代码如下:
Town:
value="London"> London
name="address.town" value="Paris"
checked="checked"> Paris
type="radio" name="address.town" value="New
York"> New York
如果你希望在应用中按照内部代码来处理城市,你得以适当的键值创建map,如下:
protected Map referenceData(HttpServletRequest
request) throws Exception { Map cityMap = new
LinkedHashMap(); cityMap.put("LDN", "London");
cityMap.put("PRS", "Paris"); cityMap.put("NYC",
"New York");
Map m = new HashMap(); m.put("cityMap",
cityMap); return m; }
现在上述代码将产生出以相关代码为值的radio按钮,同时你的用户仍能看到对他们显示友好的城市名。
Town:
value="LDN"> London
name="address.town" value="PRS"
checked="checked"> Paris
type="radio" name="address.town" value="NYC">
New York