在我的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中未选择任何值。如何防止这种情况,只需从下拉列表中删除所需的属性?
答案 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();
}
}
有关详细信息,请参阅