在页面上已经实现Tab页.
在Tab页内的数据要进行分页。
纯jsp..没有用其他框架.
要求:1.不能使用ajax.
2.不能使用客户端分页。
困扰我的地方就是,当点击tab页的第2页的时候.由于 2 的链接是当前url中start(起始数)的改变,所以整个页面刷新,而且,由于默认设置显示的是第一个tab页,所以还需要再点一下第2个tab页才能看到数据。这个用户体验很不好....
解释:1.不能用ajax是因为url传参中有一个参数是别的系统提供,SSO模块限制住了,不能跨系统。
2.不能用客户端分页是因为一个tab页是一个单数的展示,里面的数据项会很多,而且会有很多个tab页,如果用客户端分页,利用js控制分页,无论从速度还是从效率上.都不能达到要求.
所以,希望大家能够给一个建议或者解决方案。能够实现tab页内数据的分页,有一个较好的用户体验。
谢谢!
把tab的body放在iframe里面,这样页面不会刷新tab的。
至于分页怎么搞,把分页的信息传输到后台就可以搞定了,一般至少要传当前页是多少、每页显示多少就可以了,在后台根据这个信息计算成数据库认识的rowStart和rowEnd就行了。
楼主,只需要一个Servlet和JSP就可以搞定,分页都在JSP中进行,有EL表达式就可以实现。
这个是我以前做的小项目,分页使用el表达式和table实现的,后台是一个Servlet。
[code="jsp"]
<tbody>
<c:forEach var="item" items="${list}" varStatus="status">
<c:set var="row" value="${status.index % 2 != 0 ? 'odd' : 'even'}" />
<tr class="${row}" onmouseover="this.className='highlight';"
onmouseout="this.className='${row}';">
<td align="center" width="50">
<input type="checkbox" name="checks" value="${item.id}">
</td>
<td align="center">
${item.id}
</td>
<td align="center">
${item.title}
</td>
<td align="center">
<fmt:formatDate pattern="yyyy年MM月dd日 hh:mm:ss" value="${item.addDate}"/>
</td>
</tr>
</c:forEach>
<c:if test="${empty list || fn:length(list) == 0}">
<tr>
<td colspan="3">
没有数据
</td>
</tr>
</c:if>
</tbody>
</table>
<br />
<div align="center">
<fmt:formatNumber value="${count/30+1}" pattern="00" var="pageCount1"/>
<c:set var="pageCount" value="${pageCount1}" />
<c:if test="${pageNo == 1}">
<span class="unuse">[第一页]</span>
<span class="unuse">[上一页]</span>
</c:if>
<c:if test="${pageNo != 1}">
<span><a href="?pageNo=1">[第一页]</a>
</span>
<span><a href="?pageNo=${pageNo - 1}">[上一页]</a>
</span>
</c:if>
<c:forEach begin="1" end="${pageCount}" varStatus="status">
<c:if test="${status.index == pageNo}">
<span class="currentPage">第${status.index}页</span>
</c:if>
<c:if test="${status.index != pageNo}">
<span><a href="?pageNo=${status.index}">第${status.index}页</a>
</span>
</c:if>
</c:forEach>
<c:if test="${pageNo == pageCount}">
<span class="unuse">[下一页]</span>
<span class="unuse">[最后一页]</span>
</c:if>
<c:if test="${pageNo != pageCount}">
<span><a href="?pageNo=${pageNo + 1}">[下一页]</a>
</span>
<span><a href="?pageNo=${pageCount}">[最后一页]</a>
</span>
</c:if>
<!-- 其实在该form表单中,action写不写都是可以的,因为是转发请求 -->
<form style="display: inline;" action="bean.do">
<select name="pageNo">
<c:forEach begin="1" end="${pageCount}" varStatus="status">
<option value="${status.index}" ${status.index== pageNo ? 'selected' : ''}>
${status.index}
</option>
</c:forEach>
</select>
<input type="submit" value="转到"/>
</form>
</div>
</body>[/code]
全选 | 学号 | 姓名 | 出生日期 |
---|
你可以考虑Ajax跨域访问
[color=red]Ajax跨域访问方案汇总[/color]
虽然出于安全角度考虑javascript不适用于不同域之间的访问,但是因为ajax的存在还是有太多的应用需要js屡犯门规。像是二级域名比较多或者widgets、analysis之类的应用跨域访问还是有很大的存在价值的。
通常3种情形面临着要跨域获得数据:
local:abc.ciroyong.com -request-> remote:xyz.ciroyong.com(可部署)
local:www.domainabc.com -request-> remote:www.domainxyz.com(可部署)
local:abc.ciroyong.com -request-> remote:xyz.ciroyong.com(不可部署)或 remote:www.domainxyz.com(不可部署)
方法一:设定domain属性
只适合情形1。Document对象的domain属性一定程度上缓解了多个二级域名时带来的不便,只要local和remote的domain属性都设为同一个域(ciroyong.com)就可以互相访问了。不过只是一定程度上的,只能接受两个域共有的部分(如abc.ciroyong.com不能设成xyz.ciroyong.com反过来也不可,只能为ciroyong.com),还要保持至少有一个“点号”。
方法三:js脚本植入
1和2都适用,在local端的页面中插入一个在remote端部署的动态脚本生成程序,然后通过将请求命令编码成url作为包含脚本的src,响应端的程序处理url查询命令返回特定的javascript代码(包含操作或者数据),代码在插入时被浏览器解析并执行。这也是baidu在用的方法。
方法四:没有办法的办法也是最正当的方法proxy
适合全部三种情形也是解决情形3的唯一办法。就是用可以跨域的服务器语言编写一个代理proxy,放在local端。请求时ajax请求本地的proxy来读取远端的数据再返回给请求端。不破坏同源策略而且实现起来容易,我比较爱用。唯一局限是要受服务器性能限制。
如果熟悉js的话,这个效果要实现也不难吧。
用JavaScript或者jsp直接在分页的链接上面加上所在的tab的标志,比如说a href="page=3&tab=test",jsp里面页面刷新的时候直接判断tab参数,就可以知道要激活哪一个tab了。这个做法是很正常的,liferay的Portal,最多的情况下tab达到5,6级。。。都是用tab1,tab2这样的参数来定位的。
如果实在要达到无刷新的效果,不能ajax的话,用iframe也可以。
14545
#included<stdio.h>
int mian(){
int v;
scanf("%d",&v);
printf("%d",v);
}