根据另一个输入组件的值禁用/启用JSF输入组件

时间:2013-12-03 21:36:25

标签: jsf

我有两个单选按钮:

<h:selectOneRadio value="#{bean.choice}">
    <f:selectItem itemValue="yes" itemLabel="YES" />
    <f:selectItem itemValue="no" itemLabel="NO" />
</h:selectOneRadio>

<p:calendar value="#{bean.date}" />

如果选择“否”按钮,则应禁用日历的文本输入字段(灰色)。我怎么能这样做?

3 个答案:

答案 0 :(得分:12)

让目标输入组件的disabled属性检查源输入的值,并使用源组件中的<f:ajax>来更新目标组件。它将导致重新评估disabled属性。不需要值更改侦听器或其他属性。

<h:selectOneRadio value="#{bean.choice}">
    <f:selectItem itemValue="yes" itemLabel="YES" />
    <f:selectItem itemValue="no" itemLabel="NO" />
    <f:ajax render="calendar" />
</h:selectOneRadio>

<p:calendar id="calendar" value="#{bean.date}" disabled="#{bean.choice eq 'no'}" />

另见:

答案 1 :(得分:1)

您可以在myBean中使用valueChangeListener事件。

   private boolean caldisabled;  // with getter and setter

   public void checkSelectedVal(ValueChangeEvent event){

      String selectedVal=event.getNewValue().toString();
      if("NO".equalsIgnoreCase(selectedVal)){
         caldisabled=true;
      } else if("YES".equalsIgnoreCase(selectedVal)){
        caldisabled=false;
      }
}

primefaces calendar组件集disabled属性

中的视图中
<h:selectOneRadio value="#{myBean.yesNo}" valueChangeListener="#{mybean.checkSelectedVal}">
    <f:selectItem itemValue="yes" itemLabel="YES" />
    <f:selectItem itemValue="no" itemLabel="NO" />
    <f:ajax event="click" execute="@this" render="mycal"/>
</h:selectOneRadio>

<p:calendar id="mycal" value="#{myBean.date}" disabled="#{myBean.caldisabled}"/>

应该有另一种方法来做到这一点。我认为,因为这个calendar组件是Jquery datepicker你应该能够单独使用脚本来完成它,而不需要去bean并进行ajax调用

答案 2 :(得分:0)

对我来说,最后一个解决方案工作正常,但我必须将事件从 event="click" 更改为 event="change"。