【发布时间】:2015-06-27 02:29:20
【问题描述】:
在我的 JSF 视图中,我有一个 p:selectCheckboxMenu,我想通过 AJAX 对所选值执行一些业务逻辑。
对于简单的change 事件,它可以正常工作,但对于toggleSelect 事件则不行。在我的侦听器方法中,我正在检索旧的选择,但我在这里期待新的选择。
请看下面的例子:
@ViewScoped
@Named
public class RequestBean implements Serializable {
private List<String> list; // + getter/setter
@PostConstruct
private void init() {
list = new ArrayList<String>() {{
add("one"); add("two"); add("three");
}};
}
public void listener() {
System.out.println("Current content of \"list\":");
for(String s : list) {
System.out.println(s);
}
}
}
在 JSF 视图中:
<p:selectCheckboxMenu value="#{requestBean.list}" label="List">
<f:selectItem itemValue="one" itemLabel="one"/>
<f:selectItem itemValue="two" itemLabel="two"/>
<f:selectItem itemValue="three" itemLabel="three"/>
<p:ajax event="toggleSelect" listener="#{requestBean.listener}" />
<p:ajax event="change" listener="#{requestBean.listener}" />
</p:selectCheckboxMenu>
现在让我们考虑以下用例:您正在进入视图,选择了“一”和“二”。如果我点击“全选”复选框,结果是:
Info: Current content of "list":
Info: one
Info: two
但预期的结果应该是这样的:
Info: Current content of "list":
Info: one
Info: two
Info: three
对于常规更改事件,它按预期工作。在这里,我在侦听器中获得了新的选择。我该如何解决?或者我做错了什么?
GlassFish 4.1,在 Java 1.8.0_45 上运行
JSF 2.2.10 (Mojarra)
PrimeFaces 5.1
OmniFaces 1.8.1
【问题讨论】:
标签: jsf-2 primefaces