为什么没有为primefaces SelectManyCheckbox调用事件监听器?

时间:2017-07-19 11:12:54

标签: jsf primefaces

单击复选框时,不会调用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);

以及ValueChangeListener:

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

    smcb.addValueChangeListener(new CustomValueChangeListener ());

上述两种方法都不起作用。

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

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试通过调用valueChangeListener从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>

可以使用后端的valueChangeListener进行备份。

Java Code:
public void checkListener(ValueChangeEvent e) {
    System.out.println(e.getNewValue().toString());
    System.out.println(e.getOldValue().toString());

}

每当您选中或取消选中复选框时,您都可以获得所选和未选中的条目。

希望它有所帮助!!