0

我想知道options tag在 Spring 的表单命名空间中做了什么。我不明白 itemValue 属性如何与文档中提到的映射键相关。比如说我在控制器中有以下方法:

@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,但仍然一切正常。那么我在这里缺少什么?

4

2 回答 2

1

您链接到的文档说:

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

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

于 2012-07-14T11:34:48.680 回答
0

默认情况下,对于地图,选项值是map key,标签是map value,这map value是一个 Right 对象,属性编辑器将启动以显示right name. 如果属性编辑器不可用,比如键,那么它将toString()用于显示值。

于 2012-07-14T11:34:29.213 回答