我可以将多个 ListArray 放入同一 h:datatable 的不同列中吗?

发布于 2024-10-21 06:10:04 字数 643 浏览 1 评论 0原文

我有一个表格,我必须用数据填充表格的 3 列。这些列中的每一列都附加了一个来自辅助 bean 的 ArrayList。每个 ArrayList 都保存相同数量的相同类型“LabValue”的实例。每个 LabValue 都有一个名称(“参数”)和一个单位(“Einheit”),但对于第一个数据表,我只需要两列一次(如下图)。

由于 h:datatable 只能容纳一个 List,到目前为止,我通过将三个数据表放在 h:panelgrid 的一行中解决了这个问题,如下图所示:

< img src="https://i.sstatic.net/BF8vr.png" alt="单行面板网格中包含三个数据表的表单">

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

例如,Safari 将数据表 2 和 3 的标头渲染为四行,数据表 1 的标头渲染为三行(图中未显示)。这会导致偏移。

因此,最好的方法是将它们放在一个数据表中,并最终消除偏移量。

有没有办法在 JSF 2.0 中做到这一点,而无需引入包含所有三个列表的新类?

I have a form where I have to fill 3 columns of a table with data. Each of these columns has an ArrayList from a backing bean attached. Each of the ArrayLists holds the same number of instances of the same type "LabValue". Each LabValue has a name ("Parameter") and a unit ("Einheit") but I need both columns only once for the first datatable (picture below).

Since a h:datatable can only hold one List until now I solved the problem by putting three datatables in one row of a h:panelgrid as shown in the picture below:

Form with three datatables in a one-row panelgrid

This works fine but we have some trouble with our tests in different browsers: Sometimes we have a vertical offset between Datatable1 on the one hand and Datatable2&3 on the other hand (e.g. Chrome and Firefox work fine; Safari not).

E.g. Safari renders the header of datatable 2 and 3 in four lines and datatable one in three lines (not shown in picture). This will cause an offset.

So the best way would be to have them in one single datatable and finally get rid of the offset.

Is there a way to do this in JSF 2.0 without introducing a new class holding all three lists?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

注定孤独终老 2024-10-28 06:10:05

有没有办法在 JSF 2.0 中做到这一点
无需引入新类
持有所有三个列表?

不,不存在——为什么要避免这种情况如此重要?

Is there a way to do this in JSF 2.0
without introducing a new class
holding all three lists?

No, there isn't - and why would that be so important to avoid anyway?

失去的东西太少 2024-10-28 06:10:04

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

请参阅 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;
}

It's much better to create a new class, but it can be done.

See http://wiki.apache.org/myfaces/Parameters_In_EL_Functions

In the jsf do something like this:

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

In 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文