p:selectCheckboxMenu'选择所有'未调用的ajax侦听器

时间:2014-04-27 11:57:18

标签: ajax jsf primefaces

我有一个JSF:Primefaces SelectCheckBoxMenu

<p:selectCheckboxMenu value="#{domain.listaa}" label="Chooese!" style="height:25px" showCheckbox="true">
    <p:ajax update="records" listener="#{domain.muti}" />  
    <f:selectItems value="#{domain.recLabels}"/>
</p:selectCheckboxMenu>

在托管bean中:

private boolean[] recFlags = new boolean[]{true,true,true,true,true,true,true};
private String[] recLabels = new String[]{"A","AAAA","MX","NS","SOA","CNAME","TXT"};
private List<String> listaa = new ArrayList<>();

public void muti(AjaxBehaviorEvent event){
    Arrays.fill(recFlags, false);
    for(int i=0;i<recLabels.length;i++){
        if(listaa.contains(recLabels[i])){
            recFlags[i]=true;
        }
    }
    System.out.println(listaa.toString());
}

所以在SelectCheckBoxMenu我按任意按钮,ajax调用正在运行,muti()函数将运行。没有问题。 但是,如果我按下“全部选择”。 SelectCheckboxMenu中的(大多数上面)按钮,ajax调用不起作用,muti()函数不能运行,listaa(按下复选框的列表)没有变化。 为什么?如何解决,选择所有&#39;按钮有效吗?

3 个答案:

答案 0 :(得分:16)

在Primefaces 4和5中,“全部切换”复选框有一个特殊的ajax事件 - toggleSelect

只需使用与默认ajax事件相同的属性添加它。

<p:selectCheckboxMenu value="#{domain.listaa}" label="Chooese!" style="height:25px" showCheckbox="true">
    <p:ajax update="records" listener="#{domain.muti}" />  
    <p:ajax event="toggleSelect" update="records" listener="#{domain.muti}" />
    <f:selectItems value="#{domain.recLabels}"/>
</p:selectCheckboxMenu>

答案 1 :(得分:1)

这很有效。

<p:ajax event="toggleSelect"  process="@this" partialSubmit="true" />

答案 2 :(得分:0)