2011-03-09 56 views
3

我有一个表格,我必须用数据填充表格的3列。这些列中的每一个都有一个来自附加bean的ArrayList。每个ArrayLists拥有相同类型“LabValue”的相同数量的实例。每个LabValue都有一个名称(“参数”)和一个单元(“Einheit”),但是我只需要为第一个数据表创建一次列表(下图)。我可以把多个ListArrays放在同一个h:datatable的不同列中吗?

由于h:datatable只能容纳一个名单到现在为止我用的把三数据表的h:panelgrid一行解决了这个问题如下图所示的画面:

Form with three datatables in a one-row panelgrid

这工作得很好,但我们有在不同浏览器中进行测试时遇到一些麻烦:有时我们在Datatable1和Datatable2之间有一个垂直偏移量(例如,Chrome和Firefox可以正常工作; Safari不会)。

E.g. Safari以四行显示数据表2和3的标题,三行显示数据表(不显示在图中)。这会导致偏移量。

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

有没有办法在JSF 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; 
} 
+0

嗨,亚当,谢谢。我认为我的支持bean中的一些额外的代码是不能避免的。我会试一下! – 2011-03-10 07:04:52

1

有没有办法在JSF 2.0 要做到这一点,而不会引入一个新的类 持有所有三个列表?

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

+0

不是那么重要,只是想避免新的类,以便开销由于列表来自实体类,所以保持托管bean“干净”。 – 2011-03-09 20:54:01

相关问题