我是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
你的代码就可以工作了。