当前位置:编程学习 > JAVA >>

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 --------------------编程问答-------------------- 哎,这问题,我还真不知道怎么描述好,只能求大神能理解我想表达的问题了。。。求助啊 --------------------编程问答-------------------- 从最开始一步一步的找,看问题出在哪个环节
没有找出问题出在哪里当然描述不清楚问题 --------------------编程问答--------------------
引用 2 楼 udbwcso 的回复:
从最开始一步一步的找,看问题出在哪个环节
没有找出问题出在哪里当然描述不清楚问题

这样简单的说吧,我的想法是在jsp的js中,要从后台的action中获取当前页数,然后看是上一页还是下一页等等对得到的当前页进行改变,再把当前页作为参数通过url传递给后台的action,然后action把当前页作为session保存起来。现在我遇到的情况是,js获取不到最新的后台action中的当前页。我这想法有没有错啊? --------------------编程问答--------------------
引用 3 楼 woshicheng1990 的回复:
Quote: 引用 2 楼 udbwcso 的回复:

从最开始一步一步的找,看问题出在哪个环节
没有找出问题出在哪里当然描述不清楚问题

这样简单的说吧,我的想法是在jsp的js中,要从后台的action中获取当前页数,然后看是上一页还是下一页等等对得到的当前页进行改变,再把当前页作为参数通过url传递给后台的action,然后action把当前页作为session保存起来。现在我遇到的情况是,js获取不到最新的后台action中的当前页。我这想法有没有错啊?

代码写的很乱。想法也有问题吧。首先“当前页”这个东东你怎么能从Action里得到呢?Action能知道我当前页是第几页吗?很明显应该是通过页面的页码来判断,比如:当前页是第五页,通常情况下给Action传递一个“页码+每页最大记录数”,再通过业务层处理就能实现的。 --------------------编程问答-------------------- 我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢 --------------------编程问答-------------------- 同意4楼。根本不用存什么当前页,分页是你在页面上点击的页码+每页数量进行分页 --------------------编程问答--------------------
引用 6 楼 l568646976 的回复:
同意4楼。根本不用存什么当前页,分页是你在页面上点击的页码+每页数量进行分页

我那个当前页还要在一个生成表格以及上下页的table.jsp中使用。那样的话,就要保存起来吧。现在不是讨论有没有那必要的问题,而是怎么没有用的问题 --------------------编程问答--------------------
引用 5 楼 woshicheng1990 的回复:
我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢


Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
--------------------编程问答--------------------
引用 8 楼 cangaa 的回复:
Quote: 引用 5 楼 woshicheng1990 的回复:

我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢


Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
我了个去,session不能保存数据啊,是我理解的问题还是你的问题?? --------------------编程问答--------------------
引用 9 楼 woshicheng1990 的回复:
Quote: 引用 8 楼 cangaa 的回复:

Quote: 引用 5 楼 woshicheng1990 的回复:

我是想通过action层存储当前页啊。在js中,默认当前页为1,再从action层获取当前页,若为空,则不做操作,不为空,则当前页为从action获得的值。我认为没有错啊。可是怎么就获取不到改变后的session的值呢


Action何德何能可以存储数据呀?struct2只是一个mVC框架而已,没有缓存数据功能
我了个去,session不能保存数据啊,是我理解的问题还是你的问题??


session 跟 action有什么关系?  你在JSP页面不能用session么? --------------------编程问答-------------------- 看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了, --------------------编程问答--------------------
引用 11 楼 cangaa 的回复:
看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了,

有处理哦,
int currpage= Integer.parseInt(request.getParameter("currpage"));//从url传过来的参数
这个是js传给action的当前页。
然后我更新session里的当前页的值:
session.setAttribute("currpage", currpage);
我刚刚写了段代码试验了下,发现刷新以后,就可以获得改变后的session值,不刷新的话,获得的一直是原来的值。这是为什么呢? --------------------编程问答--------------------
引用 11 楼 cangaa 的回复:
看了一下你的代码,你在action似乎没有处理currentPage 你的currentPage存在session中,在JSP的showdata中用的却是$(currentPage ),当然获取不到currentPage了,

$(currentPage)是可以获取到session的值的吧。 --------------------编程问答--------------------


引用 12 楼 woshicheng1990 的回复:
Quote: 引用 11 楼 cangaa 的回复:

看了一下你的代码,你在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里放的值为“”呗,要么是没放进去,要么是取错了,这个矛盾什么?亲,慢慢找,仔细点这个是小问题,你这样把一连串的代码贴出来,看起来很烦的 --------------------编程问答--------------------
引用 16 楼 caochuankui 的回复:
获取session值的时候为“”,那就说明session里放的值为“”呗,要么是没放进去,要么是取错了,这个矛盾什么?亲,慢慢找,仔细点这个是小问题,你这样把一连串的代码贴出来,看起来很烦的

刚开始获取的本来就是"",你都没抓住问题重点。。。重点是后面还是空的,而我已经改变了session的值。至于一大串代码的问题,我是第一次发帖,不知道该怎么搞 --------------------编程问答-------------------- 为什么要把当前页 保存在session中的 直接放在struts2的值栈中 岂不是很方便  jsp页面改变值后action就能直接取到更改后的值  --------------------编程问答--------------------
引用 15 楼 woshicheng1990 的回复:
我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗


是这个问题,你要不刷新取到session中的值,需要单独发ajax请求到后台去获取。 --------------------编程问答--------------------
引用 19 楼 cangaa 的回复:
Quote: 引用 15 楼 woshicheng1990 的回复:

我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗


是这个问题,你要不刷新取到session中的值,需要单独发ajax请求到后台去获取。

为什么取不到改变后的值啊?? --------------------编程问答--------------------
引用 18 楼 u011559804 的回复:
直接放在struts2的值栈中 岂不是很方便  jsp页面改变值后action就能直接取到更改后的值 

第一个问题,直接放在struts2的值栈中什么意思??
第二个问题,我不是要JSP页面改变值后action能取到,而是相反,要jsp获取action改变后的值 --------------------编程问答--------------------
引用 20 楼 woshicheng1990 的回复:
Quote: 引用 19 楼 cangaa 的回复:

Quote: 引用 15 楼 woshicheng1990 的回复:

我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗


就是你朋友说的原因,js是在客户端,不刷新的话就无法取得session的改变后的值,如果你希望不刷新获取session中的值,就需要另外再单独发一个ajax请求去后台获取 --------------------编程问答--------------------
引用 21 楼 woshicheng1990 的回复:
Quote: 引用 18 楼 u011559804 的回复:

直接放在struts2的值栈中 岂不是很方便  jsp页面改变值后action就能直接取到更改后的值 

第一个问题,直接放在struts2的值栈中什么意思??
第二个问题,我不是要JSP页面改变值后action能取到,而是相反,要jsp获取action改变后的值


值栈就是类似存放action的一个堆栈 在action中声明的变量都会放在里面
在jsp页面能用ognl表达式 或者el表达式直接取到值得 所以 action中改变的值 在jsp中就能取到
要看值栈的内容 只要在jsp页面加<s:debug></s:debug>标签 --------------------编程问答--------------------
引用 22 楼 cangaa 的回复:
Quote: 引用 20 楼 woshicheng1990 的回复:

Quote: 引用 19 楼 cangaa 的回复:

Quote: 引用 15 楼 woshicheng1990 的回复:

我试验了下,还是没用。不刷新的话,关于session取得的一直是原来的值,刷新了以后就能取到新的值了。我朋友说session是在服务器端的数据,而js是在客户端的,不刷新的话,就无法取得session的改变后的值。我对这个不是很懂,有大神解惑下吗


就是你朋友说的原因,js是在客户端,不刷新的话就无法取得session的改变后的值,如果你希望不刷新获取session中的值,就需要另外再单独发一个ajax请求去后台获取

怎么才算是刷新了页面哦?请求转发的话,地址栏没改变啊,怎么就刷新了页面
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,