取消选择单个复选框时 Primefaces selectCheckboxMenu 行为不稳定
Primefaces selectCheckboxMenu erratic behavior when deselecting individual checkboxes
在基于 jsf 2.1 和 Primefaces 6.1.5 的应用程序中,我很难实现 <p:selectCheckboxMenu
我根据这里的说明简化了代码How to create a Minimal, Complete, and Verifiable example
我的代码现在看起来与 Primefaces Showcase 中的代码非常相似。
Primefaces Showcase
经过大量分析,我可以更好地描述 'erratic'。取消选择一个项目时,它后面的项目会受到影响。最后一项完全不受影响。第一项永远无法取消选择。这似乎是使用索引的错误。
任何人都可以确认这一点并提出解决方法吗?
这是 xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:form id="form">
<p:panel>
<p:selectCheckboxMenu id="testSCM"
value="#{myForm.testList}"
multiple="true"
label="Choose item..."
updateLabel="true">
<f:selectItems var="s" value="#{myForm.testItems}" itemLabel="#{s}" />
</p:selectCheckboxMenu>
</p:panel>
<p:commandButton value="Submit" update="displayItems" oncomplete="PF('itemDialog').show()" style="margin-top:10px;" />
<p:dialog header="Selected Items" modal="true" showEffect="fade" hideEffect="fade" widgetVar="itemDialog" width="250">
<p:outputPanel id="displayItems">
<p:dataList value="#{myForm.statusList}" var="item" emptyMessage="No items selected">
<f:facet name="header">
Status
</f:facet>
#{item}
</p:dataList>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:composition>
这是表格:
@Named("myForm")
@SessionScoped
public class MyForm implements Serializable {
private String[] testList;
private List<String> testItems;
public String[] getTestList() {
return testList;
}
public void setTestList(String[] testList) {
this.testList = testList;
}
public List<String> getTestItems() {
return testItems;
}
public void setTestItems(List<String> testItems) {
this.testItems = testItems;
}
public void reset() {
testItems = new ArrayList<>();
testItems.add("Item1");
testItems.add("Item2");
testItems.add("Item3");
testItems.add("Item4");
testItems.add("Item5");
testItems.add("Item6");
}
}
问题是由 Primefaces 版本 6.1.5 中的错误引起的。当降级到 6.0 版或升级到 6.1.8 版时,代码工作正常,这是我选择做的。
在基于 jsf 2.1 和 Primefaces 6.1.5 的应用程序中,我很难实现 <p:selectCheckboxMenu
我根据这里的说明简化了代码How to create a Minimal, Complete, and Verifiable example 我的代码现在看起来与 Primefaces Showcase 中的代码非常相似。 Primefaces Showcase
经过大量分析,我可以更好地描述 'erratic'。取消选择一个项目时,它后面的项目会受到影响。最后一项完全不受影响。第一项永远无法取消选择。这似乎是使用索引的错误。
任何人都可以确认这一点并提出解决方法吗?
这是 xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:form id="form">
<p:panel>
<p:selectCheckboxMenu id="testSCM"
value="#{myForm.testList}"
multiple="true"
label="Choose item..."
updateLabel="true">
<f:selectItems var="s" value="#{myForm.testItems}" itemLabel="#{s}" />
</p:selectCheckboxMenu>
</p:panel>
<p:commandButton value="Submit" update="displayItems" oncomplete="PF('itemDialog').show()" style="margin-top:10px;" />
<p:dialog header="Selected Items" modal="true" showEffect="fade" hideEffect="fade" widgetVar="itemDialog" width="250">
<p:outputPanel id="displayItems">
<p:dataList value="#{myForm.statusList}" var="item" emptyMessage="No items selected">
<f:facet name="header">
Status
</f:facet>
#{item}
</p:dataList>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:composition>
这是表格:
@Named("myForm")
@SessionScoped
public class MyForm implements Serializable {
private String[] testList;
private List<String> testItems;
public String[] getTestList() {
return testList;
}
public void setTestList(String[] testList) {
this.testList = testList;
}
public List<String> getTestItems() {
return testItems;
}
public void setTestItems(List<String> testItems) {
this.testItems = testItems;
}
public void reset() {
testItems = new ArrayList<>();
testItems.add("Item1");
testItems.add("Item2");
testItems.add("Item3");
testItems.add("Item4");
testItems.add("Item5");
testItems.add("Item6");
}
}
问题是由 Primefaces 版本 6.1.5 中的错误引起的。当降级到 6.0 版或升级到 6.1.8 版时,代码工作正常,这是我选择做的。