ajax+struct2结合起来实现分页,出现问题了
//jsp页面的代码<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<script type="text/javascript" src="<%=path%>/js/jquery-1.10.2.js"></script>
<script type="text/javascript" >
$(document).ready(showdata(this));
function control(elem) //用全选复选框控制全部复选框
{
var ee=document.getElementsByName("cbox");
if(elem.checked)
{
for(var i=0;i<ee.length;++i)
{
if(!ee[i].checked) //该复选框未选中
ee[i].checked=true; //设置选中
}
}
else {
for(var i=0;i<ee.length;++i)
{
if(ee[i].checked) //该复选框选中
ee[i].checked=false;
}
}
}
function controlpart() //用部分复选框控制全选框
{
var e = document.getElementById("allcbox");
e.checked = true;
var ee = document.getElementsByName("cbox");
for(var i=0;i<ee.length;++i)
{
if(!ee[i].checked) //有未选中的复选框
e.checked=false; //设置全选复选框未选中
}
}
function showdata(method)
{
var xmlhttp;
var currentpage = 1;
alert("测试");
var aa ="${currpage}";
alert(aa);
if(aa != "")
{
currentpage = aa;
var meth = method.value;
if(meth == "上一页")
currentpage = parseInt(currentpage)-1;
else if(meth=="下一页")
currentpage = parseInt(currentpage)+1;
else if(meth=="最后页"){
currentpage = "${lastpage}";
alert(currentpage);
}
alert("a");
}
else {
alert("空");
}
var pagesize = 2;
if(window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp = new ActiveXObject("Microsoft.,XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
document.getElementById("data").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "get.action?pagesize="+pagesize+"&currpage="+currentpage, true);
xmlhttp.send();
}
</script>
</head>
<body>
<br>
<div id="data"></div>
</body>
</html>
通过showdata访问action获得数据
//struct2中的action代码
public class GetUserAction {
private List list;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public String getdata()
{
ShowUser sh = new ShowServiceImpl();
List<OtUser> list = null;
HttpServletRequest request = ServletActionContext.getRequest();
int currpage= Integer.parseInt(request.getParameter("currpage"));//从url传过来的参数
int pagesize = Integer.parseInt(request.getParameter("pagesize"));//从url传过来的参数
int count = 0;
int start = (currpage-1)*pagesize;
list = sh.show(start,pagesize);//获取分页数据
count = (int) sh.getCount().longValue();//获取总的条数
int lastpage = count/pagesize+1;
request.setAttribute("lastpage", lastpage); //设置最后页
this.setList(list);
System.out.println(currpage);
//request.setAttribute("currpage", currpage);
HttpSession session = null;
session = ServletActionContext.getRequest().getSession(); //设置当前页
//将当前页设置为session类型
session.setAttribute("currpage", currpage);
return "success";
}
//生成表格的jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/plain; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
${currpage}
<table border="1" cellpadding="10">
<tr >
<th><input type="checkbox" id="allcbox" onclick="control(this);"></th>
<th width=60>用户</th>
<th width=160>用户真实姓名</th>
</tr>
<c:forEach var="user" items="${list}">
<tr>
<td><input type="checkbox" name="cbox" value="${user.uname}" onclick="controlpart();" /></td>
<td width=60 bgcolor=#004394 > ${user.uname}</td>
<td width=160 bgcolor=#004394 > ${user.urealname}</td>
</tr>
</c:forEach>
</table>
<br/>
<c:if test="${currpage > 1}"><input type="button" value="上一页" onclick="showdata(this)"/>      </c:if>
<c:if test="${currpage < lastpage}"><input type="button" value="下一页" onclick="showdata(this)"/>     
</c:if>
<input type="button" value="最后页" onclick="showdata(this)"/>
<br/>
}
现在我遇到的问题是,当我开始进入jsp页面时,当前页从session中获得的值为"",而不是null,之后就跳到action中,获取数据,然后跳到生成表格的jsp页面,并把整个jsp页面转换成text类型的数据返还给ajax的responseText中,生成一个表格。
理论上来说,这时候当前页的session值应该为1,但是我在js中获取的当前页的session值还是为"",不知道是怎么回事,session的值不是存在整个浏览器开启的时刻吗?怎么值没有得到改变呢?
分页 struct ajax session --------------------编程问答-------------------- 哎,这问题,我还真不知道怎么描述好,只能求大神能理解我想表达的问题了。。。求助啊 --------------------编程问答-------------------- 从最开始一步一步的找,看问题出在哪个环节
没有找出问题出在哪里当然描述不清楚问题 --------------------编程问答--------------------
这样简单的说吧,我的想法是在jsp的js中,要从后台的action中获取当前页数,然后看是上一页还是下一页等等对得到的当前页进行改变,再把当前页作为参数通过url传递给后台的action,然后action把当前页作为session保存起来。现在我遇到的情况是,js获取不到最新的后台action中的当前页。我这想法有没有错啊? --------------------编程问答--------------------
代码写的很乱。想法也有问题吧。首先“当前页”这个东东你怎么能从Action里得到呢?Action能知道我当前页是第几页吗?很明显应该是通过页面的页码来判断,比如:当前页是第五页,通常情况下给Action传递一个“页码+每页最大记录数”,再通过业务层处理就能实现的。 --------------------编程问答-------------------- 我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢 --------------------编程问答-------------------- 同意4楼。根本不用存什么当前页,分页是你在页面上点击的页码+每页数量进行分页 --------------------编程问答--------------------
同意4楼。根本不用存什么当前页,分页是你在页面上点击的页码+每页数量进行分页
我那个当前页还要在一个生成表格以及上下页的table.jsp中使用。那样的话,就要保存起来吧。现在不是讨论有没有那必要的问题,而是怎么没有用的问题 --------------------编程问答--------------------
我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢
Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
--------------------编程问答--------------------
我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢
Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
我了个去,session不能保存数据啊,是我理解的问题还是你的问题??
我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢
Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
session 跟 action有什么关系? 你在JSP页面不能用session么? --------------------编程问答-------------------- 看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了, --------------------编程问答--------------------
看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了,
有处理哦,
int currpage= Integer.parseInt(request.getParameter("currpage"));//从url传过来的参数
这个是js传给action的当前页。
然后我更新session里的当前页的值:
session.setAttribute("currpage", currpage);
我刚刚写了段代码试验了下,发现刷新以后,就可以获得改变后的session值,不刷新的话,获得的一直是原来的值。这是为什么呢? --------------------编程问答--------------------
看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了,
$(currentPage)是可以获取到session的值的吧。 --------------------编程问答--------------------
看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了,
有处理哦,
int currpage= Integer.parseInt(request.getParameter("currpage"));//从url传过来的参数
这个是js传给action的当前页。
然后我更新session里的当前页的值:
session.setAttribute("currpage", currpage);
我刚刚写了段代码试验了下,发现刷新以后,就可以获得改变后的session值,不刷新的话,获得的一直是原来的值。这是为什么呢?
var aa ="${currpage}";
alert(aa);
应该放到xmlhttp.onreadystatechange = function()里面 --------------------编程问答-------------------- 我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗 --------------------编程问答-------------------- 获取session值的时候为“”,那就说明session里放的值为“”呗,要么是没放进去,要么是取错了,这个矛盾什么?亲,慢慢找,仔细点这个是小问题,你这样把一连串的代码贴出来,看起来很烦的 --------------------编程问答--------------------
获取session值的时候为“”,那就说明session里放的值为“”呗,要么是没放进去,要么是取错了,这个矛盾什么?亲,慢慢找,仔细点这个是小问题,你这样把一连串的代码贴出来,看起来很烦的
刚开始获取的本来就是"",你都没抓住问题重点。。。重点是后面还是空的,而我已经改变了session的值。至于一大串代码的问题,我是第一次发帖,不知道该怎么搞 --------------------编程问答-------------------- 为什么要把当前页 保存在session中的 直接放在struts2的值栈中 岂不是很方便 jsp页面改变值后action就能直接取到更改后的值 --------------------编程问答--------------------
我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗
是这个问题,你要不刷新取到session中的值,需要单独发ajax请求到后台去获取。 --------------------编程问答--------------------
我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗
是这个问题,你要不刷新取到session中的值,需要单独发ajax请求到后台去获取。
为什么取不到改变后的值啊?? --------------------编程问答--------------------
直接放在struts2的值栈中 岂不是很方便 jsp页面改变值后action就能直接取到更改后的值
第一个问题,直接放在struts2的值栈中什么意思??
第二个问题,我不是要JSP页面改变值后action能取到,而是相反,要jsp获取action改变后的值 --------------------编程问答--------------------
我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗
就是你朋友说的原因,js是在客户端,不刷新的话就无法取得session的改变后的值,如果你希望不刷新获取session中的值,就需要另外再单独发一个ajax请求去后台获取 --------------------编程问答--------------------
直接放在struts2的值栈中 岂不是很方便 jsp页面改变值后action就能直接取到更改后的值
第一个问题,直接放在struts2的值栈中什么意思??
第二个问题,我不是要JSP页面改变值后action能取到,而是相反,要jsp获取action改变后的值
值栈就是类似存放action的一个堆栈 在action中声明的变量都会放在里面
在jsp页面能用ognl表达式 或者el表达式直接取到值得 所以 action中改变的值 在jsp中就能取到
要看值栈的内容 只要在jsp页面加<s:debug></s:debug>标签 --------------------编程问答--------------------
我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗
就是你朋友说的原因,js是在客户端,不刷新的话就无法取得session的改变后的值,如果你希望不刷新获取session中的值,就需要另外再单独发一个ajax请求去后台获取
怎么才算是刷新了页面哦?请求转发的话,地址栏没改变啊,怎么就刷新了页面补充:Java , Web 开发