1

将 DisplayTag 库与 Struts 2 和外部排序 (PaginatedLists) 一起使用在我的项目中效果很好。

不幸的是,当我向 DisplayTag 发送一个非分页列表并尝试让 DisplayTag 进行分页时,这就是问题所在。

目前,我可以毫无问题地导航到结果的所有页面。当我再次向 Struts 提交表单以获取新结果时,我遇到了问题。然后,DisplayTag 不会将其页码重置为 1,而是保留在我上次选择的页面上并保留它。

所以我的列表现在包含不同数量的数据,但 DisplayTag 仍然显示在我之前的页面上。

我得到request.getParameter("d-16544-p")了当前的页码,并试图手动将其重置为 1,但没有成功。

还有

(Integer.parseInt
    (request.getParameter(
        (new ParamEncoder(tableId)
                         .encodeParameterName(TableTagParameters.PARAMETER_PAGE)
        )            
    )) - 1 ) * pageSize 

DisplayTag 文档中的建议并没有太大帮助。

所以我的问题是,在我向 Struts 2 操作提交新请求并取回结果后,如何重置 Displaytag 以转到页面“1”。

4

2 回答 2

1

最后通过解决方法解决了这个问题。由于我在同一页面上有两个显示标签表,因此它比预期的要复杂。

我在显示标签上添加了 clearStatus="${clear1Status}",其中 clear1Status 是第一个表的状态。

然后不得不在我的jsp上添加一些额外的代码

    <%
    String firstNumParameter =  new org.displaytag.util.ParamEncoder("tableRow").encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);

    if(request.getParameter(firstNumParameter ) == null) {
        pageContext.setAttribute("clear1Status", "true");

    }else{
        pageContext.setAttribute("clear1Status", "false");
    }
%>

这解决了我的问题。至少在我的情况下。

于 2013-11-28T09:00:05.453 回答
0

我使用clearStatus的属性<display:table>

<display:table id="${tableId}" class="displaytag" clearStatus="${param['filter'] != null}" 
    excludedParams="filter" keepStatus="true" name="${employListForm.persons}"
    pagesize="20" requestURI="employlist/personsList.jsp" summary="Employees">
  <display:column class="selectPerson" title="Edit">
    <t:popup styleClass="button"
        href="${editUrl}&amp;personIndex=${pageScope[tableRowNum]}">
      <t:icon name="edit" alt="Edit" title="Edit" />
    </t:popup>
  </display:column>
  <display:column property="specialityName" title="Speciality" />
  <display:column property="name" title="Name" />
  <display:column property="statusWorkName" title="Status" />
</display:table>

当这个 JSP 在表单提交之后渲染(无论是普通提交还是 AJAX 请求 - 无关紧要),并且表单(请求)具有特殊参数 named filter,然后片段clearStatus="${param['filter'] != null}"指示 DisplayTag 清除其存储的页码/等,并从第一个开始页。

当您只是分页/重新排序时,请求没有这样的参数。

我希望你有这个想法:检查特定的请求参数(如果你已经有了它),或者检查请求/会话属性中的一些标志,如果需要页面重置,你的服务器代码应该设置这些标志。

于 2013-08-09T17:25:49.133 回答