Programmgesteuertes / dynamisches Hinzufügen einer Komponente zu einer p: dataTable-Facette
Ich versuche, einen globalen Filter für meine hinzuzufügen<p:dataTable>
Davon erstelle ich programmgesteuert aus einer verwalteten Bean. Die Tabelle funktioniert einwandfrei und wird korrekt gerendert, es wird jedoch nur die zuletzt hinzugefügte Komponente im gerendertdatatable
Facette. Hier ist der Code, den ich ausprobiert habe:
//config
FacesContext fc = FacesContext.getCurrentInstance();
Application application = fc.getApplication();
ExpressionFactory ef = application.getExpressionFactory();
ELContext elc = fc.getELContext();
//Table
table = (DataTable) application.createComponent(DataTable.COMPONENT_TYPE);
table.setId("tabexam");
table.setValue(listexam);
table.setVar("exam");
table.setWidgetVar("examTable");
table.setEmptyMessage("aucun résultat trouvé pour votre recherche");
table.setFilteredValue(filteredexams);
table.setPaginator(true);
table.setPaginatorPosition("bottom");
table.setRows(25);
table.setPaginatorTemplate("{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}");
table.setRowsPerPageTemplate("10,25,50,100");
/////////this is the part that regards this question///////////
/*
this is the HTML code that i want to translate to java code :
<f:facet name="header" >
<h:outputText value="Rechercher: "/>
<p:inputText id="globalFilter" onkeyup="examTable.filter();" style="width:200px" />
</f:facet>
*/
UIOutput tableTitle = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
tableTitle.setValue("Rechercher :");
HtmlInputText globalfilterinput = (HtmlInputText) application.createComponent(HtmlInputText.COMPONENT_TYPE);
globalfilterinput.setId("globalFilter");
ValueExpression globalfilterJSaction = ef.createValueExpression(elc, "examTable.filter()", Object.class);
globalfilterinput.setValueExpression("onkeyup", globalfilterJSaction);
Map comps = new HashMap();
comps.put("header", tableTitle);
comps.put("header", globalfilterinput);
table.getFacets().putAll(comps);
///////////////////////////////////////////////////
//Index
Column indexColumn = (Column) application.createComponent(Column.COMPONENT_TYPE);
UIOutput indexColumnTitle = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
indexColumnTitle.setValue("Index");
indexColumn.getFacets().put("header", indexColumnTitle);
//table.getColumns().add(column);
table.getChildren().add(indexColumn);
ValueExpression indexValueExp = ef.createValueExpression(elc, "#{exam.examen.studyPatientState}", Object.class);
HtmlOutputText indexOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
indexOutput.setValueExpression("value", indexValueExp);
indexColumn.getChildren().add(indexOutput);
//Name Column
Column nameColumn = (Column) application.createComponent(Column.COMPONENT_TYPE);
UIOutput nameColumnTitle = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
nameColumnTitle.setValue("Name");
nameColumn.getFacets().put("header", nameColumnTitle);
table.getChildren().add(nameColumn);
ValueExpression nameValueExp = ef.createValueExpression(elc, "#{exam.examen.rapport.rapportOraleState}", Object.class);
HtmlOutputText nameOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
nameOutput.setValueExpression("value", nameValueExp);
nameColumn.getChildren().add(nameOutput);