我有一个表单,我必须用数据填充表的3列。这些列中的每一列都有一个来自附加bean的ArrayList。每个ArrayLists都包含相同类型的“LabValue”相同数量的实例。每个LabValue都有一个名称(“参数”)和一个单位(“Einheit”)但我只需要为第一个数据表创建一个列(下图)。
由于h:datatable
只能容纳一个List,因此我通过将三个数据表放在h:panelgrid
的一行中来解决问题,如下图所示:
这很好但我们在不同的浏览器中测试时遇到了一些问题:有时我们在Datatable1和Datatable2& 3之间有垂直偏移(例如Chrome和Firefox工作正常; Safari不行)。
E.g。 Safari将数据表2和3的标题呈现为四行,并且数据表中有三行(图中未显示)。这将导致偏移。
所以最好的方法是将它们放在一个数据表中,最后摆脱偏移量。
有没有办法在JSF 2.0中执行此操作而不引入包含所有三个列表的新类?
答案 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中执行此操作 没有引入新课程 持有所有三个名单?
不,没有 - 为什么要避免这么重要呢?