我正在使用Primefaces重写一个(非常)大而旧的Richfaces应用程序。现在有一种情况,我得到了两个列表,一个包含列名,另一个包含应该以行表示的对象。
对象看起来像这样:
public class AVeryGenericThingThatIDoNotLike {
Object[] values;
//Other parameters that I dont care about
}
当我应该显示它时,我希望它将值[0]映射到第一列,值[1]映射到第二列,以此类推。
我已经查看了primefaces展示,有一个动态列的例子,但是我已经尝试过了,当我不知道可以存在哪些列时,我无法让它工作。我不知道这一点的原因是,这些列是由数据库决定的,该数据库保存一行,说明应该存在哪些列,这可以更改,所以我不能像展示示例中那样构建一个类来拥有所有可用的列。
谁能给我指点一下吗?我已经被这个问题困了好几天了,我真的需要帮助。编辑:现在它正在与Laabidi Raissi的解决方案一起工作。我现在的问题是,对于一些列,我想要呈现按钮和命令链接。使用这种方法,我只能获得字符串,如果我尝试返回像CommandButtons这样的对象,它将只打印一个java对象哈希值。
如果您正在使用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>
编辑:根据你的评论,我认为添加commandbutton
或outputlink
是非常明显的(而不是outputText
):
<h:commandButton value="#{yourManagedBean.values[colIndex]}" action="#{yourManagedBean.someActionThatTakesAParam(colIndex)}" rendered="#{colIndex == 4}"/>
假设您希望commandButton位于第5列。
这是你想要的吗?
希望能有所帮助