2015-02-09 59 views
0

如何綁定managedbean中的primefaces數據表?如何把數據,以及如何把列?如何從managedbean綁定primefaces數據表

我bean類:

public class BeanTest implements Serializable{ 
private String name; 
private String email; 
private int age; 
//getters and setters 
} 

我管理的bean:

public class TestTable implements Serializable{ 
private DataTable tabela; 
private List<BeanTest> lista; 

@PostConstruct 
public void init() { 
int age= 18; 
this.lista = new ArrayList<>(); 
this.lista.add(new BeanTest("name1", "email1", age)); 
this.lista.add(new BeanTest("name2", "email2", age++)); 
this.lista.add(new BeanTest("name3", "email3", age++)); 

this.tabela = new DataTable(); 
Column column1 = new Column(); 
column1.setHeaderText("Nome"); 

Column column2 = new Column(); 
column2.setHeaderText("Email"); 

Column column3 = new Column(); 
column3.setHeaderText("Idade"); 

this.getTabela().getChildren().add(column1); 
this.getTabela().getChildren().add(column2); 
this.getTabela().getChildren().add(column3); 

this.getTabela().setValue(this.lista); 
} 
} 

JSF頁面:

<p:dataTable id="datalist" binding="#{testeTabela.tabela}"> 
</p:dataTable> 

這顯示有三列(正確,數量和標題)表和三行(正確的數字),但我的行中沒有數據。空表只與邊框單元格。

發生了什麼事?我怎麼能綁定列和數據?

+3

避免'綁定'和繁瑣的Java代碼方式直到/除非絕對必要的在一些(非常)特殊情況下,在這種情況下似乎是絕對多餘的。查看[showcase]上的示例(http://www.primefaces.org/showcase/ui/data/datatable/basic.xhtml)。 (不要忘記點擊該頁面上的相應鏈接)。 – Tiny 2015-02-09 19:47:52

回答

5

通常,JSF組件包含3個部分:標記,組件類和呈現器。

該標籤負責組件配置。它將實例化你的組件並設置適當的屬性,監聽器和構面。配置完成後,組件將被放置在組件樹上。

使用您的示例,該頁面的代碼將類似於此:

<p:dataTable id="dataTable" var="item" value="#{bean.list}"> 
    <p:column headerText="Name">#{item.name}</p:column> 
    <p:column headerText="Email">#{item.email}</p:column> 
    <p:column headerText="Age">#{item.age}</p:column> 
</p:dataTable> 

它更容易做到這一點的方式。但是,如果您想在代碼中執行操作,則需要在列中添加一些組件以使其工作。

首先,在數據表上設置var屬性。組件(數據表)將迭代您的項目並將當前項目綁定到該名稱,以便子組件可以使用表達式來動態獲取該值。

this.getTabela().setVar("item"); 

其次,孩子UIOutput添加到列並添加表達了其財產。對於名稱欄,它會是這樣的:

FacesContext context = FacesContext.getCurrentInstance(); 
//Creates the output and sets the value to an expression language 
UIOutput output1 = new UIOutput(); 
output1.setValueExpression("value",context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),"#{item.name}", String.class)); 
//Add the output to the column 
column1.getChildren().add(output1); 

對於其他列,這是同樣的想法,但第三UIOutput的值的類型:

...createValueExpression(context.getELContext(),"#{item.age}", Integer.class)); 

正如你可能看,這可能很難維護。

使用標籤更清潔,更易於閱讀。