0

options tagSpringのフォーム名前空間で何が行われるのか知りたいです。ドキュメントに記載されているように、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 valuemap valueプロパティ エディタが を表示するために起動する Right オブジェクトright nameです。キーなどのプロパティ エディタが使用できない場合はtoString()、値を表示するために使用されます。

于 2012-07-14T11:34:29.213 に答える