Spring选项标签的用法

时间:2012-07-14 10:36:38

标签: spring spring-mvc

我想知道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,但仍然可以正常工作。那么我在这里缺少什么呢?

2 个答案:

答案 0 :(得分:1)

您链接的文档说:

  

或者,您可以指定项目的地图,在这种情况下是地图   键被解释为选项值,并且映射值对应于   选项标签。

因此,标签将地图的键显示为值,将其值显示为标签,如文档所示。

答案 1 :(得分:0)

默认情况下,地图的选项值为map key,标签为map valuemap value是一个Right对象,属性编辑器将显示right name 1}}。如果属性编辑器不可用,例如密钥,那么它将使用toString()来显示该值。