【问题标题】:Why event listener not being invoked for primefaces SelectManyCheckbox?为什么没有为 primefaces SelectManyCheckbox 调用事件侦听器?
【发布时间】:2017-12-24 15:01:36
【问题描述】:

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

以上两种方法都不行。

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

【问题讨论】:

  • 为什么需要用Java来做

标签: jsf primefaces


【解决方案1】:

我认为您可以很好地尝试通过调用 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());

}

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

希望对你有帮助!

【讨论】:

  • 感谢您的建议。我已经使用了 ValueChangeListener 以及在 jsf 中定义的 SelectManyCheckbox 的 ajax 事件侦听器,但在这种情况下(因为数据的动态性质),我必须在支持 bean 中创建 SelectManyCheckbox。是否可以为在支持 bean 中创建的 SelectManyCheckbox 使用 ValueChangeListener 和 ajax 事件?
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 2017-09-24
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2016-08-18
  • 1970-01-01
相关资源
最近更新 更多