我可以将多个列表数组放在同一个h:datatable的不同列中吗?

时间:2011-03-09 19:44:56

标签: jsf jsf-2

我有一个表单,我必须用数据填充表的3列。这些列中的每一列都有一个来自附加bean的ArrayList。每个ArrayLists都包含相同类型的“LabValue”相同数量的实例。每个LabValue都有一个名称(“参数”)和一个单位(“Einheit”)但我只需要为第一个数据表创建一个列(下图)。

由于h:datatable只能容纳一个List,因此我通过将三个数据表放在h:panelgrid的一行中来解决问题,如下图所示:

Form with three datatables in a one-row panelgrid

这很好但我们在不同的浏览器中测试时遇到了一些问题:有时我们在Datatable1和Datatable2& 3之间有垂直偏移(例如Chrome和Firefox工作正常; Safari不行)。

E.g。 Safari将数据表2和3的标题呈现为四行,并且数据表中有三行(图中未显示)。这将导致偏移。

所以最好的方法是将它们放在一个数据表中,最后摆脱偏移量。

有没有办法在JSF 2.0中执行此操作而不引入包含所有三个列表的新类?

2 个答案:

答案 0 :(得分:2)

创建一个新类要好得多,但可以做到。

请参阅http://wiki.apache.org/myfaces/Parameters_In_EL_Functions

在jsf中做这样的事情:

<h:dataTable value="#{myBean.myList}" var="labValue">
    <h:column><h:outputText value="#{labValue.label}" /></h:column>
    <h:column><h:outputText value="#{myBean.secondList[myBean.firstListIndex[labValue]].label}" /></h:column>
</h:dataTable>

在java中:

class MyWrapper implements Map {
     ...
     public Integer getIndex(Object firstRowElement) {
         int index = firstList.indexOf(firstRowElement);
         return index;
     }
     public Object get(Object obj) {
         return getIndex(obj);
     }
}
public Map getFirstListIndex() {
    return myWrapper;
}

答案 1 :(得分:1)

  

有没有办法在JSF 2.0中执行此操作   没有引入新课程   持有所有三个名单?

不,没有 - 为什么要避免这么重要呢?