2017-01-21 39 views
0

我是Groovy Grails的新手,想要在图像文件列表上实现分页。Grails:实现没有域类的分页

在我的代码中,我没有域类,我只是从文件系统中获取图像列表并在gsp页面上显示图像。

现在我想分页显示的图像。

下面是我正在显示图像文件的gsp页面。

<%@ page contentType="text/html;charset=UTF-8" %> 
<%@ page import="filterList" %> 
<html> 
<head> 
    <title>PC Screen Shots</title> 
    <meta content="xenonPC" name="layout"> 
    <style> 
    .mycontent-left { 
     border-right: 1px solid #808080; 
    } 
    </style> 
</head> 

<body> 

<div class="col-md-12"> 

    <section class="gallery-env"> 
     <div class=""> 

      <div class="album-images row"> 

       <g:set var="selectedUser" value="${selectedUser}"/> 
       <g:each in="${imageList}" var="imageName"> 
        <!-- Album Image --> 
        <div class="col-md-3 col-sm-4 col-xs-6"> 
         <div class="album-image"> 
          <a href="#" class="thumb" data-action="edit"> 
           <img style="width: auto; height: 160px;" 
            src="${createLink(controller: "customer", action: "displayImage", params: [imageName: imageName])}" 
            class="img-responsive"> 
          </a> 

          <div> 
           <g:set var="imageNameToDisplay" value="${imageName.toString()}"/> 
           <g:set var="imageNameToDisplay" 
             value="${imageNameToDisplay.substring(imageNameToDisplay.lastIndexOf("\\") + 1)}"/> 

           <label>${imageNameToDisplay}</label> 
          </div> 

          <div> 
           <a href="#" class="thumb" data-action="edit"> 
            <img style="width: auto; height: 160px;" 
             src="${createLink(controller: "customer", action: "displayImageDate", params: [imageName: imageName])}" 
             class="img-responsive" 
             style="cursor:pointer;"> 
           </a> 
          </div> 

          <div class="image-options"> 

           <g:link controller="customer" action="downloadImage" params="[imageName: imageName]"> 
            <i class="fa-download"></i> 
           </g:link> 

           <g:link controller="customer" action="deleteImage" params="[imageName: imageName, selectedUser: selectedUser]"> 
            <i class="fa-trash"></i> 
           </g:link> 
          </div> 
         </div> 
        </div> 
       </g:each> 
      </div> 
     </div> 
    </section> 
</div> 
</body> 
</html> 

在此先感谢。

回答

1

基本上,您将需要一个功能,将给定的列表拆分为特定的块。分页是发送依赖,你是知道的偏移和MAX,与相同的分页值,你可以使自己的自定义的方法与给定名单的工作:

你需要的实际方法是这样的:

/** 
* paginate usage: 
* paginate(inputList,pagination-params) 
* paginationParams=[offset:params.offset,max:params.max] 
* instanceList=PaginationHelper.paginate(instanceList,paginationParams) 
* @param inputList 
* @param input 
* @return list split based on offset and max 
*/ 
public static List splitList(List inputList, Map input) { 
    input.max = input.max ? (input.max as int) : 1 
    input.offset = input.offset ? (input.offset as int) : 0 
    if (input.max < 0) return inputList 

    def instanceTotal = inputList?.size() 
    if (input.offset < 0 || input.offset > instanceTotal) { 
     input.offset = 0 
    } 
    // Ensure pagination does not exceed from array size 
    Integer borderNumber = input.max + input.offset 
    if (borderNumber > instanceTotal) { 
     borderNumber = instanceTotal 
    } 
    // Extract sublist based on pagination 
    def objectSubList = inputList.subList(input.offset, borderNumber) 
    return objectSubList 
} 

要使用这种方法:

//your current list 
    def myList=[['id':1L,name:'name'],['id':2L,name:'name']] 

    //your page total for pagination within gsp 
    def instanceListTotal=myList?.size() ?: 0 

    //set your pagination params as per pagination input by user 
    def paginationParams = [offset: params.offset, max: params.max] 

    // get the helper class above to split it 
    def instanceList= Helper.splitList(myList,paginationParams) 

    //respond back with split result and actual total for pagination 
    render (view:'view', model:[instanceList:instanceList,instanceListTotal:instanceListTotal]) 

所以实际上使用分页与上述。不建议,但嘿粘滞的情况需要非常规的解决方案。

这里的区别以及典型的分页操作应该是明显的,但是在典型的DB查询模型中。在这种情况下没有整体列表myList。它给出了起点和最大值返回,然后去做一个新的查询。 这种情况下的分页取决于列表大小,并且在工作时,每次分页更改时不得不一次又一次地加载整个列表。 您可能希望使用某种形式的缓存解决方案来减少这里的工作。

+0

谢谢。这正是我所期待的。 –