我有两个单选按钮:
<h:selectOneRadio value="#{bean.choice}">
<f:selectItem itemValue="yes" itemLabel="YES" />
<f:selectItem itemValue="no" itemLabel="NO" />
</h:selectOneRadio>
<p:calendar value="#{bean.date}" />
如果选择“否”按钮,则应禁用日历的文本输入字段(灰色)。我怎么能这样做?
答案 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"。