在gsp中循环组循环

时间:2014-09-23 08:19:14

标签: grails

我有一个列表页面它的简单表格在哪里我在渲染简单的细节,如页面标题,摘要,正文,活跃等等。这里我想在一个单独的表和页面中显示活动页面列表在单独的表中不活动。在这里,我想使用单个表来基于is-active和in-active作为组。有没有办法在grails中做到这一点我对Grails有点新意,只需从ColdFusion切换到grails。感谢

我想做这样的事情。

<g:if test="${pageList.is-active}">
    list of active pages.
</g:if>
<g:else>
    list of Inactive pages
</g:else>
here table to be displayed with its respective page header. is there any group base looping in grails ?

               <table class="table">
                    <thead>
                        <tr>
                            <th width="1"></th>
                            <th>Title</th>
                            <th class="center">Active</th>
                        </tr>
                    </thead>
                    <tbody>
                        <g:each in="${pageList}" status="i" var="map">
                            <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
                                <td></td>
                                <td>${map.title}</td>
                                <td>${map.isActive}</td>
                            </tr>
                     </tbody>
                </table>

1 个答案:

答案 0 :(得分:0)

最简单的方法是将活动页面和非活动页面分别存储在模型中。目前您的控制器操作可能如下所示:

def listPages() {
  [pageList: Page.list()]
}

如果您更改它以使活动和非活动页面分别存储在模型中

def listPages() {
  [active: Page.findAllByActive(true), inactive: Page.findAllByActive(false)]
}

然后您可以在视图中单独渲染它们:

<h1>List of Active Pages</li>

<table class="table">
  <thead>
    <tr>
      <th width="1"></th>
      <th>Title</th>
      <th class="center">Active</th>
    </tr>
  </thead>
  <tbody>
    <g:each in="${active}" status="i" var="map">
      <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
        <td></td>
        <td>${map.title}</td>
        <td>${map.isActive}</td>
      </tr>
    </g:each>
  </tbody>
</table>

<h1>List of Inactive Pages</li>

<table class="table">
  <thead>
    <tr>
      <th width="1"></th>
      <th>Title</th>
      <th class="center">Inactive</th>
    </tr>
  </thead>
  <tbody>
    <g:each in="${inactive}" status="i" var="map">
      <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
        <td></td>
        <td>${map.title}</td>
        <td>${map.isActive}</td>
      </tr>
    </g:each>
  </tbody>
</table>

为了DRY的利益,我会移动标记以将<table>渲染成模板,并将模板中的页面列表传递给它。

更新

您在评论中指出,您无法轻松修改查询以分别返回活动和非活动页面。在这种情况下,您可以在视图中过滤它们,如下所示:

<h1>List of Active Pages</li>

<table class="table">
  <thead>
    <tr>
      <th width="1"></th>
      <th>Title</th>
      <th class="center">Active</th>
    </tr>
  </thead>
  <tbody>
    <g:each in="${active}" status="i" var="map">
      <g:if test="${map.isActive}">
        <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
          <td></td>
          <td>${map.title}</td>
          <td>${map.isActive}</td>
        </tr>
      </g:if>
    </g:each>
  </tbody>
</table>

<h1>List of Inactive Pages</li>

<table class="table">
  <thead>
    <tr>
      <th width="1"></th>
      <th>Title</th>
      <th class="center">Inactive</th>
    </tr>
  </thead>
  <tbody>
    <g:each in="${inactive}" status="i" var="map">
      <g:if test="${!map.isActive}">
        <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
          <td></td>
          <td>${map.title}</td>
          <td>${map.isActive}</td>
        </tr>
      </g:if>
    </g:each>
  </tbody>
</table>