【问题标题】:rich:dataList vertically ordered between 2 columnsrich:dataList 在 2 列之间垂直排序
【发布时间】:2022-08-20 04:16:22
【问题描述】:

我有一个包含 2 列的 dataGrid 和一个其中的 panelGrid,它可以正确显示数据,但它会在更改行之前填充两列。我需要它用列表内容的一半填充第一列,然后才转到第二列并用其余内容填充它。它现在是一个偶数的静态列表,但如果它可以使用一个动态大小的列表来完成,并且可能有奇数个值,那将是最好的。 SO中有一个答案表明asp有一个repeatcolumn标签(如果我理解正确的话)可以满足我的需求。有没有办法在jsf中使用richfaces?

<fieldset>
  <legend>Select topics:</legend>

      <rich:dataGrid value=\"#{registerForm.topics}\"
         var=\"topic\"
         columns=\"2\">

        <h:panelGrid columns=\"2\" width=\"430px\"
           columnClasses=\"checkTopic,labelTopic\" border=\"0\">
              <h:selectBooleanCheckbox id=\"checkTopic\" 
                  align=\"left\" 
                  value=\"#{registerForm.SelectedTopic}\"
                  disabled=\"#{not registerForm.ActiveRegister}\"/> 
                     <h:outputLabel value=\"#{topic.description}\" 
                            for=\"checkTopic\" />
        </h:panelGrid>                                         
      </rich:dataGrid>
                   
   <h:panelGroup rendered=\"#{empty registerForm.topics}\"
       style=\"color: red;\">
             No topics registered.
   </h:panelGroup>

</fieldset

我想我应该使用 ui:repeat,但不知道如何使用。我尝试使用 dataList 并将列表分成两部分,每部分显示在单独的行中,但看起来不太好,而且代码感觉过于复杂。

this question 也与我的相同,但答案与所需内容并不完全对应,我无法发表评论,因为 50 声望。

我需要:
价值 1 价值 3
价值 2 价值 4

使用我拥有的代码(和答案),结果是:
价值 1 价值 2
价值 3 价值 4

    标签: jsf richfaces


    【解决方案1】:

    好吧,您无法更改项目的方向,但您可以重新排序列表,这样您将拥有 [1,2,3,4,5] 而不是 [1,4,2,5,3]。

    或者,您可以使用渲染索引 (rowKeyVar) 并让您的 bean 进行数学计算,以确定应该显示哪些项目(基本上忽略您传递给组件的列表)。

    【讨论】:

    • 问题是我不想更改数据,因为 afaik 它被认为是糟糕的设计。我最终在 panelgrid 中使用了两个数据表,并使用了数据表的“第一个”属性。不完全是我想要的,但它比在 bean imo 中强制重新排序更优雅。如果没有人回答解决方案,我可能会自己回答。感谢您的输入。
    • 你会说颠倒列表是不好的设计吗?因为这是一件很平常的事情。除非有一些其他进程与列表交互,需要对其进行正确排序,否则我不知道您为什么不重新排序。
    • 好吧,由于前端的限制,它不会倒转,而是将其重新排序为独特且非常特定的用途。但是不要引用我关于“它的糟糕设计”的东西。这只是我在团队中被告知的事情。我同意这一点,因为如果不存在这种独特的逻辑,它对服务器资源的使用更少并且后端更容易维护。例如。也许明天开始使用 primefaces 并且不需要更改后端,而前端无论如何都需要更改。尽管如此,我对此很不满意,我的意见应该用一磅盐来接受。
    【解决方案2】:

    使用两个 DataTables 和“first”属性解决了这个问题。必须在后端创建“getLines”类,返回 listsize/2(综述),因为我不知道如何在前端做(但计划做)。

            <fieldset>
                <legend>Select topic:</legend>
                <h:panelGrid id="topicspanel" columnClasses="topicscol,topicscol" columns="2" border="0">
    
                    <rich:dataTable value="#{registerForm.topics}"
                        var="topic" columns="1" rows="#{registerForm.lines}"
                        border="0" id="table1">
                        <rich:column>
                            <h:panelGrid columns="2" width="430px"
                                columnClasses="checkTopic,labelTopic" border="0">
                                <h:selectBooleanCheckbox id="checkTopicCol1" align="left"
                                    value="#{registerForm.selectedTopic}"
                                    disabled="#{not registerForm.activeRegisters}" />
                                <h:outputLabel value="#{topic.name}"
                                    for="checkTopicCol1" />
                            </h:panelGrid>
                        </rich:column>
                    </rich:dataTable>
    
                    <rich:dataTable value="#{registerForm.topics}"
                        var="topic" columns="1" rows="#{registerForm.lines}"
                        border="0" id="table2" first="#{registerForm.lines}"
                        align="right">
                        <rich:column>
                            <h:panelGrid columns="2" width="430px"
                                columnClasses="checkTopic,labelTopic" border="0">
                                <h:selectBooleanCheckbox id="checkTopicCol2" align="left"
                                    value="#{registerForm.selectedTopic}"
                                    disabled="#{not registerForm.activeRegisters}" />
                                <h:outputLabel value="#{topic.name}" for="checkTopicCol2" />
                            </h:panelGrid>
                        </rich:column>
                    </rich:dataTable>
    
                </h:panelGrid> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 2016-10-19
      • 1970-01-01
      • 2013-10-18
      • 2010-09-15
      • 2013-12-09
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多