我有一个包含下拉列表和两个输入字段的表单。
<h:selectOneMenu />
<h:inputText />
<h:inputText />
我想根据下拉列表的选定值使输入字段的必需属性有条件。如果用户选择下拉列表的第一项,则输入字段必须是必需的。如果用户选择第二项,则不需要这些。
我怎样才能做到这一点?
我有一个包含下拉列表和两个输入字段的表单。
<h:selectOneMenu />
<h:inputText />
<h:inputText />
我想根据下拉列表的选定值使输入字段的必需属性有条件。如果用户选择下拉列表的第一项,则输入字段必须是必需的。如果用户选择第二项,则不需要这些。
我怎样才能做到这一点?
只需将下拉列表绑定到视图并直接在required
属性中检查其值即可。
<h:selectOneMenu binding="#{menu}" value="#{bean.item}">
<f:selectItem itemValue="first" itemLabel="First item" />
<f:selectItem itemValue="second" itemLabel="Second item" />
</h:selectOneMenu>
<h:inputText value="#{bean.input1}" required="#{menu.value eq 'first'}" />
<h:inputText value="#{bean.input2}" required="#{menu.value eq 'first'}" />
请注意,该binding
示例是原样的。绝对不要在此处将其设置为 bean 属性。另请参阅JSF 中的“绑定”属性如何工作?何时以及如何使用它?
另请注意,组件的顺序很重要。如果菜单位于树中的输入下方,请#{menu.submittedValue eq 'first'}
改用。或者,如果您想独立于此,请#{param[menu.clientId] eq 'first'}
改用。
假设您使用的是 JSF 2.0:让您的 SelectOneListBox 使用 ajax 执行并在更改列表框时重新呈现输入字段:
速写:
<h:selectOneMenu value="#{myBean.myMenuValue}">
<f:ajax render="input1"/>
..
</h:selectOneMenu>
<h:inputText id="input1" value="#{myBean.myInputValue}"
required="#{myBean.myMenuValue == 'firstEntry'}" />