【问题标题】:Can I use primefaces DataTables to display a matrix of data?我可以使用 primefaces DataTables 来显示数据矩阵吗?
【发布时间】:2015-10-30 19:32:33
【问题描述】:

基本上,我有 2 个对象集合:List 和 List。每个人在每个标准中都有一个值,从而构建了要显示的矩阵:

                  criteria1     criteria2     criteria3     ...
      person1         2             5             8
      person2         4             3             1
      person3         6             9             0
        ...

每个集合中的元素数量未知,因为它们来自查询结果。我的模型有 3 个表:criteria、person 和 criteria_person(具有 personId、criteriaId 和qualification)。

我已经能够显示带有这些集合的数据表,但我不知道如何将它们与关联的资格相关联,然后使它们持续存在。因此,任何指导将不胜感激。

【问题讨论】:

  • 不确定@xild 发布的链接中的“3D”概念是否 100% 匹配,但其中的“列”部分是。另请参阅stackoverflow.com/questions/25658034/… 并在 PrimeFaces 展示中好好看看。 '动态' 列数在那里
  • @Kukeltje 我同意。我已经开始使用 primefaces 数据表中的标签“列”,但仍然不知道如何将每个资格(单元格值)与动态创建的列相关联。我可能遗漏了一些概念性细节
  • 我不知道您所说的 是什么意思,但仍然不知道如何将每个资格(单元格值)与动态创建的列关联起来” 请通过例如澄清在问题中添加一个简化的对象模型和一个简化的(但都是 100% 有效的 xhtml

标签: primefaces datatable jsf-2.2


【解决方案1】:

你刚刚问了这么宽泛的问题。为此,您可以使用行扩展,请参阅more

您可以简单地添加一个带有人名和标准的表格,就像展示柜上的示例中的内部表格一样。 这是示例:

<p:dataTable var="person" value="#{dtBasicView.peronsViewList}">
        <f:facet name="header">
            Person with criteria
        </f:facet>
        <p:column style="width:16px">
            <p:rowToggler />
        </p:column>
        <p:column headerText="Person Name">
            <h:outputText value="#{person.personName}" />
        </p:column>
        <p:column headerText="Reg. Date">
            <h:outputText value="#{person.regDate}" />
        </p:column>

        <p:rowExpansion>
            <p:panelGrid  columns="2" columnClasses="label,value" style="width:300px">
               <p:dataTable var="cri" value="#{person.criteria}">
                    <p:column headerText="Id">
                        <h:outputText value="#{cri.id}" />
                    </p:column>

                    <p:column headerText="Year">
                        <h:outputText value="#{cri.year}" />
                    </p:column>

                    <p:column headerText="Brand">
                        <h:outputText value="#{cri.brand}" />
                    </p:column>

                    <p:column headerText="Color">
                        <h:outputText value="#{cri.color}" />
                    </p:column>
                </p:dataTable>
            </p:panelGrid>
        </p:rowExpansion>
    </p:dataTable>

【讨论】:

  • 嗯,谢谢,但“每个集合中的元素数量未知”。这意味着应该动态创建列
  • 谢谢,但我确实需要示例中描述的普通数据表
  • @Sarz。请在评论中提问,而不是在答案中“猜测”。
  • @Kukeltje 谢谢,我相信 primefaces 是一个如此广泛的库。对于这种情况,我建议他用粗略的例子(作为一个想法)
  • @aleafonso 你为什么不多探索一下primefaces。你会看到你需要什么
【解决方案2】:

我不确定我是否 100% 理解了这个问题,但我用p:columns 和一个解析当前单元格值的支持 bean 方法解决了类似的问题:

<p:dataTable value="#{curSearch.getSearchResults()}" var="curSearchResult">
    <p:columns value="#{curSearch.determineItems()}" var="curSearchItem">

        <f:facet name="header">
            <h:outputText value="#{curSearchItem}" />
        </f:facet>

        <h:outputText value="#{someUiBusinessLogicBean.generatePropertyValue(curSearchResult, curSearchItem)}" />
    </p:columns>
</p:dataTable>

希望这能说明这个想法。但我建议构建一个方便的 UI 模型。

【讨论】:

  • 这确实接近我认为需要的但由于我没有看到任何东西在单元格中重复,我会说你也可以(应该?)预先做'generatePropertyValue'列模型。这里的“虚拟”吸气剂可以被多次调用,因为你不应该在吸气剂中做(繁重的)工作,所以提前做会更好。但这只是意味着正确填充视图模型
猜你喜欢
  • 2020-11-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多