#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.