Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 jsf-摆脱;双击";在复选框(PrimeFaces';选择ManyCheckBox)中显示值_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 jsf-摆脱;双击";在复选框(PrimeFaces';选择ManyCheckBox)中显示值

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">

表单中有一个复选框,需要双击该复选框才能将值传递给bean。我想有双重屈服,但不知道如何摆脱它

当前代码:

<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);
}