【发布时间】: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