我想知道options tag
在Spring的表单命名空间中做了什么。我不明白itemValue属性如何与docs中提到的map键相关。
比方说,我在控制器中有以下方法:
@ModelAttribute("rights")
public Map<ADMIN_RIGHTS, String> populateRights(){
Map<ADMIN_RIGHTS, String> rights = new LinkedHashMap<ADMIN_RIGHTS, String>();
rights.put(ADMIN_RIGHTS.ADMIN, "administrator");
rights.put(ADMIN_RIGHTS.COMP,"company");
rights.put(ADMIN_RIGHTS.EMP,"Employee");
return rights;
}
jsp是:
<form:select path="right" >
<form:options items="${rights}"/>
</form:select>
propertyEditor类是:
public class RightsPropertyEditor extends PropertyEditorSupport {
@Override
public String getAsText() {
Right right = (Right) getValue();
if (right != null) {
return right.getName();
}
return super.getAsText();
}
@Override
public void setAsText(String rightStr) throws IllegalArgumentException {
if (rightStr != null && rightStr.equals("ADMIN")){
rightStr = "Adminstrator credential";
}
else if(rightStr != null && rightStr.equals("COMP")){
rightStr = "Computer credential";
}
else if(rightStr != null && rightStr.equals("EMP")){
rightStr = "Employee credential";
}
setValue(new Right(rightStr));
}
在jsp中我没有给出itemValue和itemLabel,但仍然可以正常工作。那么我在这里缺少什么呢?
答案 0 :(得分:1)
您链接的文档说:
或者,您可以指定项目的地图,在这种情况下是地图 键被解释为选项值,并且映射值对应于 选项标签。
因此,标签将地图的键显示为值,将其值显示为标签,如文档所示。
答案 1 :(得分:0)
默认情况下,地图的选项值为map key
,标签为map value
,map value
是一个Right对象,属性编辑器将显示right name
1}}。如果属性编辑器不可用,例如密钥,那么它将使用toString()
来显示该值。