将偏移选择器添加到Grails分页



我有这个grails应用程序,我添加了一个数字字段和一个按钮,点击后会传递查询参数,特别是偏移值,这样用户就可以更快地导航到特定页面,因为分页最多有2000多个页面,你可以想象导航它。无论如何,我的问题是,我用jquery处理偏移量,一切都很好,但当我在数字字段上按enter键时,会触发与控制器结合构建的表单,实际上会过滤回第1页。所以我想知道是否有人知道我该如何添加一个额外的字段,当提交带有过滤器的表单时,该字段也会传递偏移值。很抱歉没有代码发布,但这个应用程序是一个怪物,我在Grails或Spring引导方面很糟糕。感谢您的支持。

你指的是2000页还是2000行。

此外,我认为如果你分享一些来自的代码

  1. 控制器方法

  2. GSP(因此是.gps文件(

  3. Javascript实现

它将让很多人了解如何帮助我们解决问题

我会为那些可能寻找答案的人发布答案。

Grails分页使用TwitterBootstrapTagLib类,您可以在那里找到分页逻辑。它在会话参数中查找"offset"变量,如果找不到,则创建一个。现在,解决方案比设置"偏移量"变量有点棘手,因为当你这样做时,你会禁用分页箭头,为什么?解释太久了,但相信我,你会的。

为了避免必须控制分页的所有其他部分,而分页在这个类中做得很好,您可以在调用需要分页的数据的控制器中创建一个新的会话变量,例如_offset。

def controllerActionX() {
...
if(params.containsKey('offset') &&  !params.containsKey('_offset')){
params['_offset'] = params.offset
}
...
}

您需要首先进行检查,因为在第二次迭代中,您不想将偏移量重新分配给_offset,因为那样您将被困在一页中。还要注意,偏移量已经存在于会话中,由引导类分配。

然后在视图中创建字段:

<input type="submit" class="goto-page" id="goto-page" value="Go To Page"/>
<g:field type="number" class="topage-number" name="_offset" min="1" value="${params._offset?:1}"/>

这是不言自明的,然而,_offset字段中的值是一个人输入的值,因此我们仍然需要根据每页的最大记录来计算偏移量,即为了在每页10条记录的基础上获得第2页,我们的偏移量必须在11-19、19之间,因为这使得计算更容易。

在服务层的最后一步,我们计算如下:

def get(HttpSession session, Map params, Xclass xUser, String status) {
....
String offset = '0'
if(params.containsKey('_offset')){
if(params['_offset'] != params.offset){
params.offset = ((params._offset as int) * (max as int)) - 1
}else{
params['_offset'] = (params.offset as int) / (max as int) + 1
}
}
if (params.containsKey('offset')) offset = params.offset
...
def result = executeQuery(resultsQuery,mapping, [max: max, offset: offset])
result

就是这样。记住在计算时将变量强制转换为整数;之后您不必将它们转换为String,因为这是由会话处理的。

顺便说一句,这是一个写得很差的应用程序,因为服务层永远不应该处理任何端点事务,如果我们遵循正确的SOLID和MVC原则,这只是控制器的工作,但我发现这个应用程序是这样的,所以我不得不使用它

最新更新