1

我正在使用 Primefaces 重写一个(非常)大且旧的 Richfaces 应用程序。我现在有一个情况,我得到两个列表,一个带有列名,一个带有应该表示为行的对象。

该对象如下所示:

public class AVeryGenericThingThatIDoNotLike {
    Object[] values;
    //Other parameters that I dont care about
}

当我应该显示这个时,我希望它把 values[0] 映射到第一列,将 values[1] 映射到第二列,依此类推。

我查看了 primefaces 展示,并且有一个动态列的示例,但我已经尝试过了,当我不知道可以存在哪些列时,我无法让它工作。我不知道这一点的原因是这些列是从一个数据库中决定的,该数据库包含一行说明应该存在哪些列并且这可以改变,所以我不能构建一个类来让所有列都可用,就像在展示示例中一样.

任何人都可以在这里给我任何指示吗?我已经坚持了几天,我真的需要帮助。

编辑:现在它有点使用 Laabidi Raissi 的解决方案。我现在的问题是,对于某些列,我希望呈现按钮和命令链接。使用这种方法,我只能获取字符串,如果我尝试返回像 CommandButtons 这样的对象,它只会打印一个 java 对象哈希。

4

1 回答 1

6

如果您使用的是 JSF2,那么我认为这个解决方案可能适合您。首先,在您的托管 bean 中,您从 DB(动态)构建列列表,然后:

<p:columns value="#{yourManagedBean.listOfColumnsFromDB}"  var="column" columnIndexVar="colIndex">  
  <f:facet name="header"> #{column}</f:facet>
  <h:outputText value="#{yourManagedBean.values[colIndex]}" />
</p:columns>

编辑:根据您的评论,我认为添加commandbuttonoroutputlink非常明显(而不是outputText):

<h:commandButton value="#{yourManagedBean.values[colIndex]}" action="#{yourManagedBean.someActionThatTakesAParam(colIndex)}" rendered="#{colIndex == 4}"/>

假设您想要第 5 列中的 commandButton。

那是你要找的吗?

希望这可以帮助

于 2013-04-05T12:58:33.147 回答