为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?
Posted
技术标签:
【中文标题】为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?【英文标题】: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来做 【参考方案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 事件?以上是关于为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?的主要内容,如果未能解决你的问题,请参考以下文章
IBM Bluemix 支持 Primefaces? [关闭]
如果在primefaces中禁用复选框值,则该值将为false