java - Primefaces 动态列,以编程方式

标签 java jsf primefaces

我正在使用 Primefaces 重写一个(非常)大而旧的 Richfaces 应用程序。我现在有两个列表,一个包含列名,另一个包含应表示为行的对象。

对象看起来像这样:

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

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

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

谁能给我指点一下吗?我已经坚持了几天,我真的需要帮助。

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

最佳答案

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

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

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

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

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

这就是您要找的吗?

希望对你有帮助

关于java - Primefaces 动态列,以编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833764/

相关文章:

java - 写一个简单的程序来使用堆栈

java - Hadoop - 未加载 IntWritable(int) 构造函数

java - 我应该如何检查 BufferedWriter 是否已经关闭?

jsf - 当你得到 "java.lang.ClassNotFoundException: void"时如何找到缺失的类

css - 如何隔离 PrimeFaces Widget 不受主站点 CSS 的影响

java - Spring @RequestBody 覆盖

java - 返回 JSF 页面上的图像列表

jsf-2 - 自己的 ResourceHandler 从数据库流式传输图像

jsf - 使用 2 个 map 或带有行和列标题的列表的 PrimeFaces 复选框网格?

jsf-2 - Primefaces DialogFramework - 如何显示位于 WEB-INF 中的对话框?