来自复选框的ADF切换所需属性

时间:2014-01-23 12:43:24

标签: oracle-adf

在我的jsff文件中,我有一些默认需要的输入字段。现在我们想要一种使用复选框切换所需属性的方法。已经测试了几种解决方案,其中一种是这样的:

<af:selectBooleanCheckbox id="sbc1" label="myLabel" value="#{sessionBean.skipInput}" autoSubmit="true"/>

<af:selectOneChoice label="myLabel" id="soc1" partialTriggers="sbc1" value="#{sessionScope.sessionBean.someValue}" required="#{!sessionBean.skipInput}">

<f:selectItems value="#{applicationScope.applicationBean.myItems}" id="si1"/>

</af:selectOneChoice>

当我选中复选框以将required属性设置为false时,selectOneChoice将显示为红色,表示在drowdown中未选择任何值。如何防止这种情况,只需从下拉列表中删除所需的属性?

1 个答案:

答案 0 :(得分:0)

您的解决方案是正确的方法,但问题是只要未满足选项框的required约束,ADF就无法更改复选框值。因此,只要在选择框中没有选择任何内容,您将始终获得“需要选择”消息,并且不会在服务器上更新复选框的新值。

要解决此问题,您需要将复选框上的immediate属性设置为true以跳过验证,并添加valueChangeListener以处理复选框的更改并手动调用渲染响应阶段:

<af:selectBooleanCheckbox id="sbc1" label="Skip Choice" 
                          value="#{sessionBean.skipInput}" 
                          autoSubmit="true"
                          immediate="true" 
                          valueChangeListener="#{sessionBean.toggleSkipInput}"/>
public class SessionBean {

...

  public void toggleSkipInput(ValueChangeEvent vce) {
    setSkipInput(Boolean.TRUE.equals(vce.getNewValue()));
    FacesContext.getCurrentInstance().renderResponse();
  }
}

有关详细信息,请参阅