【发布时间】:2017-11-01 12:16:02
【问题描述】:
在基于 jsf 2.1 和 Primefaces 6.1.5 的应用程序中,我难以实现 <p:selectCheckboxMenu
我根据How to create a Minimal, Complete, and Verifiable example这里的说明简化了代码 我的代码现在看起来与 Primefaces Showcase 中的代码非常相似。 Primefaces Showcase
经过大量分析,我可以更好地描述“不稳定”。取消选择一个项目时,它后面的项目会受到影响。最后一项完全不受影响。并且永远不能取消选择第一项。这似乎是使用索引的一个错误。
任何人都可以确认这一点并提出解决方法吗?
这里是 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");
}
}
【问题讨论】:
-
那么如果你使用一个不需要转换器的“简单”列表就可以了?
-
用一个简单的列表来测试这个是个好主意。我得到同样的行为。现在很清楚,问题与转换器无关。
-
这些是创建minimal reproducible example 的步骤。这样做总是好的。帮助定位问题并创建更好/更清晰的问题。 styleClass 属性是否相关?面板样式类?如果不将它们删除(正如您应该使用的转换器)。也添加一个简单的 bean,以便更容易验证问题
-
它们不相关,我根据您的建议删除了所有内容。 Primefaces 中似乎存在与使用的索引有关的错误。在使用 3 个字符串的测试中,无法选择/取消选择第一个字符串。与最后(第三)项相同。标签显示不正确。但是,复选框会按原样显示。
-
转换器还在
标签: primefaces jsf-2 selectcheckboxmenu