Jsf 为什么不为primefaces SelectManyCheckbox调用事件侦听器?

Jsf 为什么不为primefaces SelectManyCheckbox调用事件侦听器?,jsf,primefaces,Jsf,Primefaces,单击复选框时,不会调用SelectManyCheckbox的事件侦听器 我的SelectManyCheckbox代码: SelectManyCheckbox smcb = new SelectManyCheckbox(); UISelectItem item = new UISelectItem(); item.setItemValue("ItemValue"); item.setItemLabel("ItemLabel"); smcb.getChil

单击复选框时,不会调用SelectManyCheckbox的事件侦听器

我的SelectManyCheckbox代码:

    SelectManyCheckbox smcb = new SelectManyCheckbox();

    UISelectItem item = new UISelectItem();
    item.setItemValue("ItemValue");
    item.setItemLabel("ItemLabel");

    smcb.getChildren().add(item);
我试过AjaxBehavior:

    AjaxBehavior ajaxBeh = (AjaxBehavior) fc.getApplication().createBehavior(AjaxBehavior.BEHAVIOR_ID);
    ajaxBeh.setRender(Collections.singletonList("@this"));
    ajaxBeh.setExecute(Collections.singletonList("@this"));
    ajaxBeh.setImmediate(true);
    ajaxBeh.setTransient(true);
    ajaxBeh.addAjaxBehaviorListener(new AjaxBehaviorListener() {
        @Override
        public void processAjaxBehavior(AjaxBehaviorEvent e)
                throws AbortProcessingException {
            System.out.println("Event Triggered");
        }
    });

    smcb.addClientBehavior("change",ajaxBeh);
还有一点:

    public class CustomValueChangeListener implements ValueChangeListener {
    @Override
    public void processValueChange(ValueChangeEvent arg0)
           throws AbortProcessingException {
        System.out.println("processValueChange");
        }
    }

    smcb.addValueChangeListener(new CustomValueChangeListener ());
上述两种方法都不起作用


如何设置一个事件侦听器,以便在选中或取消选中复选框时调用它?

我认为您可以通过调用一个函数从jsf代码运行ajax事件,并在Bean端处理您的选择

JSF Code:
<p:selectManyCheckbox id="custom" columns="1" layout="pageDirection" value="#{dapBean.selection}" disabled="#{!dapBean.status}"
                    valueChangeListener="#{dapBean.checkListener}">
    <f:selectItems value="#{dapBean.toolOptions}" var="tool" itemLabel="#{tool.toolLabel}" itemValue="#{tool.toolLabel}" />
    <f:ajax event="valueChange" update = "@form"></f:ajax>
</p:selectManyCheckbox>
每次勾选或取消勾选复选框时,您都可以获得选中和未选中的条目


希望能有帮助

谢谢你的建议。我已经为jsf中定义的SelectManyCheckbox使用了ValueChangeListener和ajax事件监听器,但在本例中(由于数据的动态性质),我必须在支持bean中创建SelectManyCheckbox。对于在支持bean中创建的SelectManyCheckbox,是否可以使用ValueChangeListener和ajax事件?为什么需要在Java中这样做
Java Code:
public void checkListener(ValueChangeEvent e) {
    System.out.println(e.getNewValue().toString());
    System.out.println(e.getOldValue().toString());

}