2008-11-28 101 views

回答

3

該值旨在發送一個SelectItem對象,而不是像itemValue這樣的字符串。 itemValue是項值,它作爲請求參數傳遞給服務器,但該值是指向SelectItem實例的值綁定表達式。

如果你看看這個JSF:

<h:selectOneRadio value=""> 
    <f:selectItem itemValue="TestValue" itemLabel="TestLabel" /> 
</h:selectOneRadio> 

它變成這個HTML:

<table> 
    <tr> 
    <td> 
     <input type="radio" name="j_id_id9" id="j_id_id9:0" value="TestValue" /> 
     <label for="j_id_id9:0"> TestLabel</label> 
    </td> 
    </tr> 
</table> 

所以值=的ValueBinding指着你的託管bean一個SelectItem和項目值=的值正在提交。如果您決定添加一個值=「#{TestBean.mySelectItem}」,它不會以任何方式更改輸出的HTML,但JSF實現將知道mySelectItem字段的getter屬性應該用於此。

編輯:澄清答案多一點。 SelectItem的value屬性通過getter和setter屬性將SelectItem綁定到託管bean中的SelectItem字段。如果你這樣設置值:

<h:selectOneRadio value=""> 
    <f:selectItem itemValue="TestValue" itemLabel="TestLabel" value="#{TestBean.mySelect}"/> 
</h:selectOneRadio> 

它會調用在中,testBean的getMySelectItem()方法。正如你所看到的,這與itemValue沒有任何關係,因爲itemValue是用戶提交表單時設置請求內容的值的重要工具。然後,項目值將被存儲在H:它希望已經綁定到一個字符串場這樣selectOneRadio值:

<h:selectOneRadio value="#{TestBean.selectedRadioValue}"> 
<f:selectItem itemValue="1" itemLabel="1. radio one" /> 
<f:selectItem itemValue="2" itemLabel="2. radio two" /> 
</h:selectOneRadio> 

現在,如果用戶檢查其他看起來像電臺:「1.無線電一個「值」1「將被存儲在TestBean的變量中,名爲selectedRadioValue

+1

我認爲你在這裏有一個更好的(原始)答案,但是我已經讀了第四句話,但仍然無法理解它。澄清? – jmanning2k 2009-08-25 14:35:57