Вопрос по facet, datatable, jsf, primefaces, dynamically-generated – как программно / динамически добавить компонент в фасет p: dataTable

1

я пытаюсь добавить глобальный фильтр для моего из которых я создаю программно из управляемого бина. Таблица работает нормально и отображается правильно, однако в последнем отображается только последний добавленный компонент.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 :
       
       
      
      
    */
    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);

Ваш Ответ

1   ответ
2

 может иметь толькоодин ребенок.

Это, как указано в вашем комментарии кода,

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

уже недействителен Это неЯ тоже не работал в Facelets. Вы должны обернуть это в.

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

Просто сделайте то же самое в коде Java. Помните: естьничего такого которые могуттолько быть сделано в коде Java, а не в XHTML, или наоборот. Все, что возможно в Java, также возможно с использованием чистого XHTML (в отличие от JSP). Разница лишь в том, что XHTML, как правило, гораздо менее многословен и более удобен в обслуживании в этой области.

хорошо, еще раз спасибо. Jalal Sordo
Вы'Добро пожаловать Да, задайте отдельный вопрос, который не имеет ничего общего с программным созданием фасета, как задано в текущем вопросе. BalusC
Что я могу сказать, человек, ты?просто гений, спасибо, я тожеУ меня проблемы с column.setFilterBy () и column.setSortBy () или я должен задать отдельный вопрос для этого. Jalal Sordo

Похожие вопросы