使用带Struts 2的DisplayTag库和外部排序(PaginatedLists)在我的项目中运行良好。
不幸的是,当我向DisplayTag发送一个非Paginated列表并尝试让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”。
答案 0 :(得分:1)
最后修复了一个解决方法。由于我在同一页面上有两个显示标签表,因此比预期更复杂。
我在displaytag上添加了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");
}
%>
这解决了我的问题。至少在我的场景中。
答案 1 :(得分:0)
我使用clearStatus
的{{1}}属性:
<display:table>
在表单提交后呈现此JSP(无论是普通提交还是AJAX请求 - 无关紧要),而form(request)具有名为<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}&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>
的特殊参数,然后片段filter
指示DisplayTag清除其存储的页码/等,并从第一页开始。
当您只是分页/重新排序时,请求没有这样的参数。
我希望你有这个想法:检查特定的请求参数(如果你已经拥有它),或检查请求/会话属性中的一些标志,如果需要页面重置,你的服务器代码应该设置。