inputText的required属性应该取决于另一个组件的提交值

use*_*679 5 jsf conditional input required

我有一个包含下拉列表和两个输入字段的表单.

<h:selectOneMenu />
<h:inputText />
<h:inputText />
Run Code Online (Sandbox Code Playgroud)

我想根据下拉列表的选定值使输入字段的必需属性成为条件.如果用户选择下拉列表的第一项,则必须输入输入字段.如果用户选择第二个项目,则不需要那些项目.

我怎样才能做到这一点?

Bal*_*usC 9

只需将下拉列表绑定到视图,然后直接在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'}" />
Run Code Online (Sandbox Code Playgroud)

请注意,该binding示例是原样.绝对不要在这里将它设置为bean属性.另请参见"绑定"属性如何在JSF中起作用?应该何时以及如何使用?

另请注意,组件的排序很重要.如果菜单位于树中输入的下方,请#{menu.submittedValue eq 'first'}改用.或者,如果您想独立于此,请#{param[menu.clientId] eq 'first'}改用.


Mat*_*ndy 5

假设您使用的是 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'}" />
Run Code Online (Sandbox Code Playgroud)