以编程方式对动态列进行Primeface

unz*_*med 1 java jsf primefaces

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

该对象如下所示:

public class AVeryGenericThingThatIDoNotLike {
    Object[] values;
    //Other parameters that I dont care about
}
Run Code Online (Sandbox Code Playgroud)

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

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

谁能在这里给我任何指示?我已经坚持了几天,我真的需要帮助.

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

Laa*_*ssi 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>
Run Code Online (Sandbox Code Playgroud)

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

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

假设你想在第5列中使用commandButton.

那是你在找什么?

希望这可以帮助