如何在primefaces组件selectOneMenu和日历中切换禁用?

时间:2015-04-24 08:27:32

标签: jsf primefaces

如何在primefaces组件selectOneMenu和日历中切换禁用? 问题是当用户在日历中输入值时,应禁用 selectOneMenu 。但是当他从日历 删除价值时,应该再次启用selectOneMenu

我尝试过this solution,但由于这些组件没有动作属性,我无法弄明白。 我没有验证按钮我喜欢使用某些事件。

2 个答案:

答案 0 :(得分:0)

您可以使用ajax事件来确定值是否已更改。

<p:calendar ... >
  <p:ajax event="change" listener="#{bean.dateChange}" update="selectOneMenuId"/>
</p:calendar>

然后在你的bean中使用这样的东西:

private boolean disableSelectOneMenu = true;
public void dateChange(DateSelectEvent event) {
    Date date = event.getDate();
    if (date == null) { 
        disableSelectOneMenu = true;
    } else {
        disableSelectOneMenu = false;
    }
}

并在禁用selectOneMenu的标签时使用disableSelectOneMenu属性。

答案 1 :(得分:0)

<p:calendar/><p:selectOneMenu>都有disabled个属性。两个组件都有ajax事件,<p:calendar/>dateSelect<p:selectOneMenu/>change。 因此,您需要创建一个bean方法,该方法将根据已进行的选择返回truefalse并将其绑定到disabled属性,并在选择后更新这些组件。

例如JSF部分:

<p:calendar id="calendar" value="#{bean.calendar}" disabled="#{bean.calendarDisabled}">
        <p:ajax event="change" update="selector calendar" process="@this"/>
</p:calendar>


<p:selectOneMenu id="selector" disabled="#{bean.calendarDisabled != true}">
    <p:ajax event="change" update="selector calendar" process="@this"/>
</p:selectOneMenu>

豆部分:

public boolean calendarDisabled(){
     if(calendar != null){
           return false;
     }else{
         //...do whatever you needs basing on your requirements
     }
}

另请注意Primefaces manual