2017-03-05 1 views
0

showcase 예제를 사용하여 p : columns 및 페이지 매김이있는 선언적 p : dataTable.DataTable Columns 페이지 매김 문제

이 방법은 프로그래밍 방식으로 작동하고 페이지로드 그리드에는 데이터가 표시됩니다. 프로그래밍 방식으로 페이지 매김을 클릭하면 모든 데이터가 손실됩니다. 여전히 올바른 행을 표시하지만 데이터가 누락 된 이유는 확실하지 않습니다.

enter image description here

프로젝트 : https://github.com/ravihariharan/primefaces-test Primefaces 6, JSF 2.2.14은, 톰캣 8.5.3

에 참조 : 1. 주/웹 애플리케이션/columns.xhtml 2 주/자바/조직 /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