Jsf中单选按钮的value和itemValue属性之间有什么区别?
该值用于发送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>
因此,value = valueBinding指向托管bean中的SelectItem,而itemValue =正在提交的值。如果您决定添加一个值=“#{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可用于设置用户提交表单时请求中的值。然后,itemValue将存储在h:selectOneRadio的值中,希望您已将其绑定到一个String字段,如下所示:
<h:selectOneRadio value="#{TestBean.selectedRadioValue}"> <f:selectItem itemValue="1" itemLabel="1. radio one" /> <f:selectItem itemValue="2" itemLabel="2. radio two" /> </h:selectOneRadio>
现在,如果用户检查看起来像他的无线电:“ 1. radio one ”值“ 1”将存储在TestBean的名为selectedRadioValue的变量中