2013-11-15 46 views
1

我正在嘗試爲我的<p:dataTable>添加一個全局篩選器,其中我通過託管bean以編程方式創建了該篩選器。該表正常工作並呈現正確,但只有最後添加的組件呈現在datatable方面。這裏是我試過的代碼:如何以編程方式/動態地將組件添加到p:dataTable方面

//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); 

回答

2

像正常XHTML/Facelets的代碼,<f:facet>只能有一個孩子

這一點,因爲在你的代碼註釋指出,

<f:facet name="header" > 
    <h:outputText value="Rechercher: "/> 
    <p:inputText id="globalFilter" onkeyup="examTable.filter();" style="width:200px" /> 
</f:facet> 

已經是無效的。它在Facelets中也不會有效。您需要將其包裝在<h:panelGroup>中。

<f:facet name="header" > 
    <h:panelGroup> 
     <h:outputText value="Rechercher: "/> 
     <p:inputText id="globalFilter" onkeyup="examTable.filter();" style="width:200px" /> 
    </h:panelGroup> 
</f:facet> 

只是在Java代碼中做同樣的事情。請記住:什麼都沒有哪些可以只有可以在Java代碼中完成,而不是在XHTML中完成,反之亦然。使用純XHTML(與JSP不同),Java中所有可能的東西也是可能的。唯一的區別是XHTML在這方面通常要少得多並且維護更友好。

+0

我能說什麼男人,你只是天才,謝謝你,我也有column.setFilterBy()和column.setSortBy()問題,或者我應該問一個單獨的問題。 –

+0

不客氣。是的,問一個單獨的問題,這與當前問題中提到的以編程方式創建方面無關。 – BalusC

+0

好的,再次感謝你。 –

相關問題