大家都知道DisplayTag标签在中小型项目中使用是的比较多的,关于它的用法和一些优点我这里就不多说了,网上有很多资料供参考。这里就说下他的分页问题。DisplayTag标签的分页是通过 requestURI 属性实现的,代码如下:
Html代码:
- <display:table id="idListRType" name="pageViewRtype"
- class="list_tb" requestURI="${path}/site/rTypeClickPageTag.action" >
- <display:column property="RType" title="房间类型"></display:column>
- <display:column property="price" title="预设单价"></display:column>
- <display:column property="clPrice" title="钟点价格/小时"></display:column>
- <display:column property="bed" title="床位数"></display:column>
- <display:column property="clRoom" title="是否按钟点计费(Y/N)"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
这种方法只要其后台服务处理恰当在jsp页面可轻松实现“上一页”“下一页”等功能。
可是如果页面上有两个(或者更多)表格需要分页怎么办?是的,最初我也想的是,这不是依葫芦画瓢吗?照着上面的写不就得了,于是实现代码如下:
Html代码 :
- <display:table id="idListRType" name="pageViewRtype"
- class="list_tb" requestURI="${path}/site/rTypeClickPageTag.action" >
- <display:column property="RType" title="房间类型"></display:column>
- <display:column property="price" title="预设单价"></display:column>
- <display:column property="clPrice" title="钟点价格/小时"></display:column>
- <display:column property="bed" title="床位数"></display:column>
- <display:column property="clRoom" title="是否按钟点计费(Y/N)"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
-
-
- <display:table id="idListRoominfo" name="pageViewRinfo"
- class="list_tb" requestURI="${path}/site/rInfoClickPageTag.action">
- <display:column property="id" title="房间号"></display:column>
- <display:column property="roomtype.RType" title="房间类型"></display:column>
- <display:column property="state" title="房间状态"></display:column>
- <display:column property="location" title="所在区域"></display:column>
- <display:column property="RTel" title="房间电话"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
呵呵,看起来妥妥的。可是当点击两个表格其中一个的上一页,下一页链接时发现,另一个表格也跟着动了:它回到了首页,我们的一般设计应该是,当操作其中的一个表格时,另一个表格应该保持原来的状态,该是第几页的就是第几页,不应该随着其他的分页而变化。那么,为什么会出现上述这种情况呢?稍微思考下我们马上发现问题所在了,那是因为在操作其中一个表格时另一个表格的当前页码并没有被传送至后台。知道问题了,那么我们的改进代码如下:
Html代码:
- <display:table id="idListRType" name="pageViewRtype"
- class="list_tb" requestURI="${path}/site/rTypeClickPageTag.action?rtypeCurrentPage=${pageViewRtype.currentPage}" >
- <display:column property="RType" title="房间类型"></display:column>
- <display:column property="price" title="预设单价"></display:column>
- <display:column property="clPrice" title="钟点价格/小时"></display:column>
- <display:column property="bed" title="床位数"></display:column>
- <display:column property="clRoom" title="是否按钟点计费(Y/N)"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
-
-
- <display:table id="idListRoominfo" name="pageViewRinfo"
- class="list_tb" requestURI="${path}/site/rInfoClickPageTag.action?rtypeCurrentPage=${pageViewRtype.currentPage}">
- <display:column property="id" title="房间号"></display:column>
- <display:column property="roomtype.RType" title="房间类型"></display:column>
- <display:column property="state" title="房间状态"></display:column>
- <display:column property="location" title="所在区域"></display:column>
- <display:column property="RTel" title="房间电话"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
其中rtypeCurrentPage和rtypeCurrentPage两个参数在后台用request接收一下,重新查询一遍就可以了,那这样是不是就可以了呢?还是不行,多点击几次分页链接之后发现无法定位到页面了,再看浏览器地址栏发现,rtypeCurrentPage参数的个数随着你点击超链接的次数在同步增加,情况如下:
http://localhost:8080/SunHotelManager/site/rInfoClickPageTag.action?rtypeCurrentPage=1&rtypeCurrentPage=1
这样当然就有问题了,那这怎么解决呢?说也简单,加个 excludedParams="*"属性就可以了,代码:
Html代码:
- <display:table id="idListRType" name="pageViewRtype" excludedParams="*"
- class="list_tb" requestURI="${path}/site/rTypeClickPageTag.action?rtypeCurrentPage=${pageViewRtype.currentPage}" >
- <display:column property="RType" title="房间类型"></display:column>
- <display:column property="price" title="预设单价"></display:column>
- <display:column property="clPrice" title="钟点价格/小时"></display:column>
- <display:column property="bed" title="床位数"></display:column>
- <display:column property="clRoom" title="是否按钟点计费(Y/N)"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
-
-
- <display:table id="idListRoominfo" name="pageViewRinfo" excludedParams="*"
- class="list_tb" requestURI="${path}/site/rInfoClickPageTag.action?rtypeCurrentPage=${pageViewRtype.currentPage}">
- <display:column property="id" title="房间号"></display:column>
- <display:column property="roomtype.RType" title="房间类型"></display:column>
- <display:column property="state" title="房间状态"></display:column>
- <display:column property="location" title="所在区域"></display:column>
- <display:column property="RTel" title="房间电话"></display:column>
- <display:column title="操作"><a rel="#">修改</a> <a rel="#">删除</a> </display:column>
- </display:table>
这样就可以实现两个表格分页互不干扰了。
可能有大侠说,这里对每个表格用异步不就可以吗?是的一开始我也觉得是,可是,DisplayTag标签压根没提供这种实现啊,至少我没找到。
原文来自
站长网