【问题标题】:p:dataTable single selection radio button error : cannot be cast to java.util.Collectionp:dataTable 单选单选按钮错误:无法转换为 java.util.Collection
【发布时间】:2015-02-18 12:54:43
【问题描述】:

Primefaces 4.0

您好,我正在尝试使用单选按钮单选实现<p:dataTable>。表格呈现正确,但是当您提交页面时,我收到以下错误:

java.lang.ClassCastException: [Lpt.ef.besa.pe.common.api.TermDepositProduct; cannot be cast to java.util.Collection
    at org.primefaces.component.datatable.DataTable.getRowData(DataTable.java:977)
    at org.primefaces.component.datatable.feature.SelectionFeature.decodeSingleSelection(SelectionFeature.java:47)
    at org.primefaces.component.datatable.feature.SelectionFeature.decode(SelectionFeature.java:38)
    at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:60)
    at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
    at org.primefaces.component.api.UIData.processDecodes(UIData.java:232)
    at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)

我的数据表代码:

<p:dataTable var="product" value="#{availableTermDepositProducts.rows}" selection="#{form.product}"
            emptyMessage="#{i18n['messages.global.dataTable.emptyMessage']}" rowKey="#{product.id}">

            <p:column selectionMode="single" />
            ...columns
</p:dataTable>'

我的后盾:

public class TermDepositProductSubscriptionFormBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private TermDepositProduct product;
    private String productId;
    private boolean automaticRenewal;
    private boolean interestCapitalization;
    private BigDecimal amount;

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public boolean isAutomaticRenewal() {
        return automaticRenewal;
    }

    public void setAutomaticRenewal(boolean automaticRenewal) {
        this.automaticRenewal = automaticRenewal;
    }

    public boolean isInterestCapitalization() {
        return interestCapitalization;
    }

    public void setInterestCapitalization(boolean interestCapitalization) {
        this.interestCapitalization = interestCapitalization;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public TermDepositProduct getProduct() {
        return product;
    }

    public void setProduct(TermDepositProduct product) {
        this.product = product;
    }
}

如果我使用单选,为什么它会一直尝试转换为集合?

-谢谢

【问题讨论】:

  • 您直接向 PrimeFaces 询问可能会更幸运。我们只是 PrimeFaces 用户而不是 PrimeFaces 开发人员。同时,只需使用您可能已经知道的集合/数组。
  • 您可以随时尝试更新的版本和/或查看发行说明,从那时起已有 24 个 4.0.x 版本,17 个 5.0.x 和 11 个 5.1.x 版本。
  • 哦,顺便说一句,[Lpt.ef.besa.pe.common.api.TermDepositProduct 是一个数组([L 表示),而不是单个项目。所以它试图将一个数组转换为一个集合......
  • 感谢大家的帮助,kukeltje 你是对的。我没有仔细阅读错误日志,我认为它正在尝试转换所选项目,但它正在尝试将数组转换为集合。我只是要使用一个集合来填充数据表。

标签: jsf primefaces datatable


【解决方案1】:

目前不支持使用数组选择数据表,所以我要用集合填充数据表。

我虽然 Primefaces 试图将 Selected Item 转换为集合,但它试图转换我用来填充数据表的 Array,因此出现错误。我没有仔细阅读错误日志。

【讨论】:

  • 感谢您的回答 ;-)。但是单一选择应该与单一对象类型的普通 getter/setter 一起使用。无需为此使用集合。
  • 实际上,单选按钮不支持数组,您必须使用集合来填充数据表,正如本文forum.primefaces.org/viewtopic.php?f=3&t=41164中的一位primefaces开发人员所述@
  • 啊……即使我错过了“填充”部分。我只关注 [L 和选择的 getter/setter(我看不出有什么问题):-)
猜你喜欢
  • 2011-01-03
  • 2014-03-18
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2018-07-08
相关资源
最近更新 更多