一尘不染

值和项目值之间的差异

jsp

Jsf中单选按钮的value和itemValue属性之间有什么区别?


阅读 341

收藏
2020-06-08

共1个答案

一尘不染

该值用于发送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的变量中

2020-06-08