读书人

struts的页面刷新有关问题,一个困扰了

发布时间: 2012-02-03 22:02:47 作者: rapoo

struts的页面刷新问题,一个困扰了很久的问题,肯请大家帮忙
做的是翻页的数据显示,但是每次点击上一页或下一页,有时翻有时不翻,也就时并不是每次都进入struts的action里.
以前页做过类似的 "购物车 ",每次添加时,也是不是每次添加都进入struts的action里,有时添加错误,有时添加正确.
当点击按刷新按钮时,刷新页面都能出来正确的结果.但是每次刷新都重复执行上次的操作,这个也是我不想要得错误.

问题1.如何有效的解决每次不进入action里问题,让每次点击正确,并不是时进时不action进.

问题2.当点击刷新刷新按钮时,不让它自动增加,而是正确操作点击才增加.

////////这个时我得翻页的action.
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
int perRows = 10;
String currPage = request.getParameter( "page ");
if (currPage == null) {
Page p = new Page(1, perRows, "Orders ",
"OrderID,CustomerID,shipVia,shipName ", "OrderID ", " ", " ");
ArrayList arr = p.getArrayList();
if (arr != null) {
request.setAttribute( "page ", arr);
request.getSession().setAttribute( "pagelist ", p);
}
arr=null;
p = null;
} else if (currPage != null) {
if ( "Next ".equals(currPage)) {
Page p = (Page) request.getSession().getAttribute( "pagelist ");
p.setCurrPage(p.getCurrPage() + 1);
ArrayList arr = p.getArrayList();
if (arr != null) {
request.setAttribute( "page ", arr);
request.getSession().setAttribute( "pagelist ", p);
}
arr=null;
p=null;
}else if( "Prev ".equals(currPage)){
Page p=(Page)request.getSession().getAttribute( "pagelist ");
p.setCurrPage(p.getCurrPage()-1);
ArrayList arr=p.getArrayList();
if(arr!=null){
request.getSession().setAttribute( "pagelist ",p);
request.setAttribute( "page ", arr);
}
arr=null;
p=null;
}else if( "start ".equals(currPage)){
Page p=(Page)request.getSession().getAttribute( "pagelist ");
p.setCurrPage(1);
ArrayList arr=p.getArrayList();
if(arr!=null){
request.setAttribute( "page ",arr);
request.getSession().setAttribute( "pagelist ",p);
}
arr=null;
p=null;
}else if( "end ".equals(currPage)){
Page p=(Page)request.getSession().getAttribute( "pagelist ");
p.setCurrPage(p.getTotalPage());
ArrayList arr=p.getArrayList();
if(arr!=null){
request.getSession().setAttribute( "pagelist ",p);
request.setAttribute( "page ",arr);
}
arr=null;
p=null;
}
}
return mapping.findForward( "page ");
}

////////////这个是jsp页面的代码
<body>
This is my JSP page. <br/>
<table border= "1 " whidth= "100% ">
<tr>
<th> OrderID </th> <th> CustomerID </th> <th> shipVia </th> <th> shipName </th>
</tr>
<logic:notEmpty scope= "request " name= "page " >
<logic:iterate id= "item " name= "page " scope= "request " type= "com.util.OrderPageItem ">


<tr>
<td> <bean:write name= "item " property= "orderID "/> </td>
<td> <bean:write name= "item " property= "customer "/> </td>
<td> <bean:write name= "item " property= "sipvia "/> </td>
<td> <bean:write name= "item " property= "shipname "/> </td>
</tr>
</logic:iterate>
</logic:notEmpty>
</table>
<c:if test= "${pagelist.prev} ">
<a href= " <%=request.getContextPath() %> /page.do?page=start "> 首页 </a>
<a href= " <%=request.getContextPath() %> /page.do?page=Prev "> 上一页 </a>
</c:if>
<c:if test= "${!pagelist.prev} ">
<font color= "red "> 上一页 </font>
</c:if>
<c:if test= "${pagelist.next} ">
<a href= " <%=request.getContextPath() %> /page.do?page=Next "> 下一页 </a>
<a href= " <%=request.getContextPath() %> /page.do?page=end "> 末页 </a>
</c:if>
<c:if test= "${!pagelist.next} ">
<font color= "red "> 下一页 </font>
</c:if>
</body>
</html>

[解决办法]
关于你的第1个问题,我以前遇到过,但是忘了是怎么解决的了,应该不是代码问题.

关于你的第2个问题,刷新时自然会再对action进行操作,建议使用防重复提交功能,适用于在action里增加和删除的操作!
举例说明:添加一条记录,首先通过一个action转到添加记录页面,这个action里可以只写一句代码:this.saveToken(request);然后转到添加记录页面,填写完资料后,提交保存,进入另一个action,目的是保存到数据库,在这个action里开始写上:
if(!this.isTokenValid(request,true)){
PrintWriter o = response.getWriter();
String msg = PubFunc.encodeGB( "请不要重复提交! ");
o.println( " <script language= 'JavaScript '> ");
o.println( "alert ( ' " + msg + " '); ");
o.println( "history.back(-1); ");
o.println( " </script> ");
o.flush();
o.close();
return null;
}

[解决办法]
哦,原来是用toKen啊,我知道了,但是第一个问题怎么解决呢,很困扰啊,大家请指教一下好么??????
[解决办法]
大家请指教一下好么??????

读书人网 >Java Web开发

热点推荐