2012-07-14 19 views
0

我想知道options tag在Spring的表單命名空間中做了什麼。我不明白如何在docs中提到的itemValue屬性與地圖關鍵字相關。在控制器 例如說我有以下方法:Spring選項標記的用法

@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> 

而且屬性編輯器類:

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

默認的地圖,期權價值是map key和標籤是map value,該map value是右對象的屬性編輯器會踢在顯示right name。如果屬性編輯器不可用,請說明密鑰,那麼它將使用toString()來顯示該值。

1

您鏈接到文檔說:

或者,你可以指定地圖項目,在這種情況下,地圖 鍵被解釋爲選項值和映射值對應於 選項標籤。

因此,標籤顯示地圖的關鍵字爲值,其值作爲標籤顯示。