2017-03-05 4 views
0

ショーケースの例を使用して、p:列とページネーションがあるDeclarative p:dataTableを使用します。DataTableの列のページングの問題

これはプログラム的な方法で動作させたいと思いますし、ページロードグリッドにはデータが表示されます。プログラムでページ分割をクリックすると、すべてのデータが失われます。それでも正しい行が表示されますが、なぜデータが欠落しているのかわかりません。

enter image description here

プロジェクト:https://github.com/ravihariharan/primefaces-test Primefaces 6、Tomcatの8.5.3

でJSF 2.2.14は、参照してください: 1.メイン/ webappの/ columns.xhtml 2.メイン/ javaの/ ORG /primefaces/showcase/view/data/datatable/ColumnsView.java

@PostConstruct 
public void init() { 
    cars = service.createCars(50); 

    createDynamicColumns(); 

    createProgramaticGrid(); 
} 

private void createProgramaticGrid() { 
    DataTable dataTable = createDataTable(); 

    dataTable.setId("progCars"); 
    dataTable.setVar("progCar"); 
    dataTable.setValueExpression("value", createValueExpression("#{dtColumnsView.cars}", List.class)); 

    dataTable.setPaginator(true); 
    dataTable.setRows(10); 
    Columns columns = createColumn(); 
    ValueExpression columnValues = createValueExpression("#{dtColumnsView.columns}", List.class); 
    columns.setValueExpression("value", columnValues); 
    columns.setVar("column"); 

    OutputLabel headerValue = createOutputLabel(); 
    headerValue.setValueExpression("value", createValueExpression("#{column.header}", String.class)); 
    columns.getFacets().put("header", headerValue); 

    OutputLabel value = createOutputLabel(); 
    value.setValueExpression("value", createValueExpression("#{progCar[column.property]}", String.class)); 

    columns.getChildren().add(value); 

    dataTable.getChildren().add(columns); 

    FacesContext context = FacesContext.getCurrentInstance(); 
    UIViewRoot viewRoot = context.getViewRoot(); 
    viewRoot.findComponent("form:mainGridBody").getChildren().add(dataTable); 

} 

private OutputLabel createOutputLabel() { 
    return (OutputLabel) createComponent(OutputLabel.COMPONENT_TYPE); 
    // return new OutputLabel(); 
} 

private Columns createColumn() { 
    return (Columns) createComponent(Columns.COMPONENT_TYPE); 
    // return new Columns(); 
} 

private DataTable createDataTable() { 
    return (DataTable) createComponent(DataTable.COMPONENT_TYPE); 
    // return new DataTable(); 
} 

private UIComponent createComponent(String componentType) { 
    return FacesContext.getCurrentInstance().getApplication().createComponent(componentType); 
} 

columns.xhtml

<h3>programmatic</h3> 
    <p:panel id="mainGridBody"> 

    </p:panel> 

答えて

0

これは、javax.faces.FULL_STATE_SAVING_VIEW_IDSを使用してこれが機能しています。

javax.faces.FULL_STATE_SAVING_VIEW_IDS

<context-param> 
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name> 
    <param-value>/columnsprog.xhtml</param-value> 
</context-param> 
+0

これは、このコードを動作させるための唯一のオプションですか? – Ravi

関連する問題