将表单提交到Struts操作后,在DisplayTag上将页面设置为1

时间:2013-06-28 09:44:15

标签: java jsp struts2 pagination displaytag

使用带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”。

2 个答案:

答案 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}&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> 的特殊参数,然后片段filter指示DisplayTag清除其存储的页码/等,并从第一页开始。

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

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