вид вкладки с данными (динамические столбцы), не работающий в первичных пространствах

#jsf #jsf-2 #primefaces

#jsf #jsf-2 #primefaces

Вопрос:

Я пытаюсь создать динамическую таблицу с вкладками. Кажется, что он работает без вкладок. но список имен столбцов не заполняется, когда я использую его с tabview. У меня есть несколько вкладок, и я пытаюсь повторно использовать один и тот же код для всех вкладок.

  </ui:define>
    <ui:param name="menuTitle" value="Build Rule - Search" />
    <ui:define name="content">
        <h:body>
            <h:form prependId="false">
                <p:panel id="rulePanel"
                    style="margin: 0 auto; margin-top: 12px; width: 900px">
                    <p:tabView scrollable="true" var="test" value="#{tableBean.monDocTPBeanList}">
                        <p:tab title="Tab 1">
                            <p:dataTable var="rowName" value="#{test.rowNamesList}"
                                rowIndexVar="rowIdx">


                                <p:column headerText="" styleClass="ui-widget-header">
                                    <h:outputText value="#{rowName}" />
                                </p:column>

                                <p:columns var="columnName"     value="#{test.colNamesList}"    headerText="#{columnName}" columnIndexVar="colIdx">
                                    <ui:repeat value="#{test.data3D[rowIdx][colIdx]}"
                                        var="data">
                                        <p:panel>
                                            <h:outputText value="#{data}" />
                                        </p:panel>
                                    </ui:repeat>
                                </p:columns>
                            </p:dataTable>
                        </p:tab>
                    </p:tabView>
                </p:panel>
            </h:form>
        </h:body>
    </ui:define>

My bean class looks as below 


@ManagedBean(name = "tableBean")
@ViewScoped

public class TableBean implements Serializable{

    private static final long serialVersionUID = -1166918470591692944L;

    private List<String> rowNames = new ArrayList<String>();
    private List<String> colNames = new ArrayList<String>();
    private ArrayList<ArrayList<ArrayList<String>>> data3D = new ArrayList<ArrayList<ArrayList<String>>>();

    private ArrayList<MonDocTpBean> monDocTPBeanList = new ArrayList<MonDocTpBean>();

    public ArrayList<MonDocTpBean> getMonDocTPBeanList() {
        return monDocTPBeanList;
    }

    public void setMonDocTPBeanList(ArrayList<MonDocTpBean> monDocTPBeanList) {
        this.monDocTPBeanList = monDocTPBeanList;
    }


    public TableBean() {

        rowNames.add("row1");
        rowNames.add("row2");

        colNames.add("col1");
        colNames.add("col2");
        colNames.add("col3");

        // Setup 3 dimensional structure
        ArrayList<MonDocTpBean> monDocTPBeanList1 = new ArrayList<MonDocTpBean>();

        for (int i = 0; i < rowNames.size(); i  ) {
            data3D.add(new ArrayList<ArrayList<String>>());
            for (int j = 0; j < colNames.size(); j  ) {
                data3D.get(i).add(new ArrayList<String>());
            }
        }

        // row 1, col 1, 3 items data3D.get(0).get(0).add("item1");
        data3D.get(0).get(0).add("item2");
        data3D.get(0).get(0).add("item3");

        // row 1, col 2, 1 items data3D.get(0).get(1).add("item1");

        // row 1, col 3, 2 items data3D.get(0).get(2).add("item1");
        data3D.get(0).get(2).add("item2");

        // row 2, col 1, 2 item data3D.get(1).get(0).add("item1");
        data3D.get(1).get(0).add("item2");

        // row 2, col 2, 1 item data3D.get(1).get(1).add("item1");
        MonDocTpBean _MonDocBean = new MonDocTpBean();
        _MonDocBean.setColNamesList(colNames);
        _MonDocBean.setRowNamesList(rowNames);
        _MonDocBean.setData3D(data3D);
        MonDocTpBean _MonDocBean1=setValues();
        monDocTPBeanList1.add(_MonDocBean);
        monDocTPBeanList1.add(_MonDocBean1);

        this.setMonDocTPBeanList(monDocTPBeanList1);
    }
  

Комментарии:

1. Какая версия PrimeFaces — также в вашем p:columns есть опечатка — значение =»test.colonameslist}» должно быть #{test.COLONAMESLIST}

2. Обновленный код. Я использую primefaces версии 4.

3. MonDocTpBean — что это? Я предполагаю, что это расширяет TabModel? способ, которым значение =»» работает для разных элементов, сильно отличается, ваши имена столбцов и т.д. Все еще находятся в testBean, а не в test, насколько я вижу.

4. Установите cache="false" на p:tabView , чтобы быть в безопасности

5. У меня похожий вариант использования: p: DataTable в динамических вкладках. Заполнено только содержимое последней вкладки. Я использую Primefaces 5.2.