JSF - 导致错误的数据表绑定(无法转换)



我是JSF的新手。我需要从dataTable中检索rowData

这是我的代码:

       <h:form>
            <h1><h:outputText value="List"/></h1>
            <p:dataTable value="#{accountBacking.dataModel}" 
                         binding="#{accountBacking.htmlTable}" 
                         var="item">
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Id"/>
                    </f:facet>
                    <h:outputText value="#{item.id}"/>
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Action"/>
                    </f:facet>
                    <p:commandButton value="Submit" action="#{accountBacking.destination()}/>
                </p:column>
           </p:dataTable>
        </h:form>

Bean:

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
@ManagedBean (name = "accountBacking")
@ViewScoped
public class AccountBacking implements Serializable {
private List<Account> daftarAccount;
private DataModel dataModel;
private HtmlDataTable htmlTable;
private AccountFacade service;
private Account account;
@PostConstruct
public void init()
{
}
public DataModel getDataModel() {
    dataModel = new ListDataModel();
    daftarAccount = service.findAll();
    if(daftarAccount != null && daftarAccount.size()>0)
        dataModel.setWrappedData(daftarAccount);
    return dataModel;
}
public void setDataModel(DataModel dataModel) {
    this.dataModel = dataModel;
}

public HtmlDataTable getHtmlTable() {
    return htmlTable;
}
public void setHtmlTable(HtmlDataTable htmlTable) {
    this.htmlTable = htmlTable;
}
public void destination(){
   acount = (Account)htmlTable.getRowData();
}

然而,h:dataTable内部的绑定标签导致了一个错误,它说:

Cannot convert org.primefaces.component.datatable.DataTable@4f5b348a of type class org.primefaces.component.datatable.DataTable to class javax.faces.component.html.HtmlDataTable

为什么?如何修复它,以便从表中检索rowData

提前感谢!

这是因为org.primefaces.component.datatable.datatable没有扩展(is NOT A)类javax.faces.component.html.HtmlDataTable.

这是Primeface的Datable类层次结构

类别数据表

java.lang.Object
    javax.faces.component.UIComponent
        javax.faces.component.UIComponentBase
          javax.faces.component.UIData
              org.primefaces.component.api.UIData
                  org.primefaces.component.datatable.DataTable

更改

private HtmlDataTable htmlTable;

private DataTable htmlTable; // also change the import statement

你的代码就可以工作了。

最新更新