如何动态设置Primefaces PanelGrid的多列标题

时间:2015-01-30 09:34:09

标签: dynamic jsf-2 primefaces

我想动态地为每个列创建具有列名的primefaces PanelGrid。

我的代码如下所示:

private void setPanelGridHeader(PanelGrid grid, String[] columnNames) {
    Row row = null;
    Column col = null;
    String columnName = null;
    OutputLabel label = null;

    grid.setColumns(columnNames.length);

    row = new Row();

    for (int i = 0; i < columnNames.length; i++) {
        columnName = columnNames[i];
        label = new OutputLabel();
        label.setValue(columnName);

        col = new Column();
        row.getChildren().add(col);
        col.getChildren().add(label);
    }

    grid.getFacets().put("header", row);
}

如果添加单个组件HtmlOutputText,它可以正常工作,但是当我尝试添加行和列时,只会创建一个小的空行。

预期输出为:

<f:facet name="header">
    <p:row>
        <p:column> A </p:column>
        <p:column> B </p:column>
        <p:column> . </p:column>
        <p:column> . </p:column>
    </p:row>

</f:facet>

我做错了什么?还有其他选择吗?

我刚刚发现使用primefaces 5.1甚至facelets也没有按预期工作:

        <p:panelGrid columns="2">
            <f:facet name="header">
                <p:row>
                    <p:column > A </p:column>
                    <p:column > BBBBB </p:column>
                </p:row>
            </f:facet>
            <h:outputText value="aaaaa" />
            <h:outputText value="b" />
        </p:panelGrid>

产生(预期是注释):

<thead class="ui-panelgrid-header">
    <tr class="ui-widget-header" role="row">
        <td colspan="2" role="columnheader">A BBBBB</td>

        <!-- EXPECTED TWOCOLUMN HEADER ------------------<<<<<<<<
        <td role="columnheader">A</td>
        <td role="columnheader">BBBBB</td>
         -->
    </tr>
</thead>
<tbody>
    <tr class="ui-widget-content" role="row">
        <td role="gridcell" class="ui-panelgrid-cell">aaaaa</td>
        <td role="gridcell" class="ui-panelgrid-cell">b</td>
    </tr>
</tbody>

这可能是个错误。任何解决方法?

0 个答案:

没有答案