2008-11-28 110 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