【问题标题】:Primefaces selectCheckboxMenu erratic behavior when deselecting individual checkboxesPrimefaces selectCheckboxMenu 取消选择单个复选框时的不稳定行为
【发布时间】: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


【解决方案1】:

问题是由 Primefaces 6.1.5 版中的错误引起的。当降级到 6.0 版或升级到 6.1.8 版时,代码可以正常工作,这是我选择做的。

问题描述在Primefaces issue tracker on github

【讨论】:

  • 太好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多