Jsf 2 jsf-摆脱;双击";在复选框(PrimeFaces';选择ManyCheckBox)中显示值
表单中有一个复选框,需要双击该复选框才能将值传递给bean。我想有双重屈服,但不知道如何摆脱它 当前代码:Jsf 2 jsf-摆脱;双击";在复选框(PrimeFaces';选择ManyCheckBox)中显示值,jsf-2,primefaces,Jsf 2,Primefaces,表单中有一个复选框,需要双击该复选框才能将值传递给bean。我想有双重屈服,但不知道如何摆脱它 当前代码: <p:selectManyCheckbox id="displayBy" style="font-size: 12px" value="#{detailedDashboardMB.displayBy}" valueChangeListener="#{detailedDashboardMB.onDisplayByClick}" columns="6" layout="grid">
<p:selectManyCheckbox id="displayBy" style="font-size: 12px" value="#{detailedDashboardMB.displayBy}" valueChangeListener="#{detailedDashboardMB.onDisplayByClick}" columns="6" layout="grid">
<f:ajax render=":messages:growl detailed-chart" />
<f:selectItem itemLabel="Weekday" itemValue="Weekday" />
</p:selectManyCheckbox>
第一次单击(选择选项)显示:
选定:
[]
第二次单击(取消选择该选项)显示:
选定:
[工作日]
ValueChangeListener不能像您期望的那样工作,这是一个常见的错误,可能是因为它的名称 关于
valueChangeListener
和
[…]valueChangeListener仅在提交表单且提交的值与初始值不同时才会调用。[……]
所以。。。由于ValueChangeListener仅在提交表单时工作,而这不是您想要做的,因此您可以使用
更新组件并调用bean中的方法:
<p:selectManyCheckbox id="displayBy" style="font-size: 12px" value="#{detailedDashboardMB.displayBy}" columns="6" layout="grid">
<p:ajax update=":messages:growl detailed-chart" listener="#{detailedDashboardMB.onDisplayByClick()}" />
....
....
我不知道为什么您的代码需要点击两下才能工作,但请尝试使用
示例。好的,我理解您的问题valueChangeListener
在更新模型值之前调用,因此您的displayBy
似乎未同步
下面是正确的代码:
public void onDisplayByClick(ValueChangeEvent e) {
log.debug("OLD: " + e.getOldValue()); //is empty at first time
log.debug("NEW: " + e.getNewValue()); // is not anymore at first time
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Checkbox Selected", e.getNewValue().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
第一次单击时,是否选中html复选框?是。但是,当我第二次单击“还使侦听器事件btwIt工作”时,所选的值会显示出来。我以前使用过
p:ajax
,但是在这里放了一个event=“click”
。现在我看到它不是这样工作的。在这种情况下,您应该使用event=“change”
,但它是SelectManyCheckBox的默认p:ajax事件,因此您不必指定。
public void onDisplayByClick(ValueChangeEvent e) {
log.debug("OLD: " + e.getOldValue()); //is empty at first time
log.debug("NEW: " + e.getNewValue()); // is not anymore at first time
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Checkbox Selected", e.getNewValue().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}