Mit dem Beispiel-Beispiel funktioniert die Deklarative p: dataTable mit p: Spalten und Seitenumbruch.DataTable-Spalten Seitenumbruch Ausgabe
Ich möchte, dass dies auf eine programmatische Weise funktioniert und auf Seite laden Raster mit Daten gezeigt wird. Wenn ich auf die Paginierung für Programmatic klicke, sind alle Daten verloren. Es zeigt immer noch die richtigen Zeilen, aber ich bin mir nicht sicher, warum die Daten fehlen.
Projekt: https://github.com/ravihariharan/primefaces-test Primefaces 6, JSF 2.2.14, auf Tomcat 8.5.3
Siehe: 1. main/webapp/columns.xhtml 2. main/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>
Ist dies die einzige Möglichkeit, diesen Code funktioniert? – Ravi