首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

jsp中判断页面是刷新进入还是按钮点击进入,该如何处理

2012-01-09 
jsp中判断页面是刷新进入还是按钮点击进入我写了个简单的页面,里面有个form处理方法是jsp页面自己,在处理

jsp中判断页面是刷新进入还是按钮点击进入
我写了个简单的页面,里面有个form处理方法是jsp页面自己,在处理时需要判断出页面时通过form点击进来的,而不是打开的新页面和刷新.代码如下:

文件名   test.jsp
<html> <head> </head>
<body>
  <form   id= "form1 "   name= "form1 "   method= "post "   action= "test.jsp ">
      <input   type= "submit "   name= "Submit "   onclick= " "   value= "确认 "   />
  </form>
  <%
      out.println(request.getMethod());
      if(request.getMethod().equals( "POST "))
      {
          out.println( "点击进入 ");
      }
     
    %>

</body>
</html>

现在的结果是,如果新打开一个test.jsp,输出即request.getMethod()获得的值为 "GET ".当通过点击 "确定 "按钮进入test.jsp时,request.getMethod()获得的值为 "POST ",但是这时如果刷新页面,request.getMethod()获得的值也为 "POST ".这样就区分不了页面是处理form的,如果才能达到需要的结果?   将 "确定 "的情况区分开来.

[解决办法]
if(request.getMethod().equals( "POST "))
{
out.println( "点击进入 ");//处理完毕后一般执行重定向,就不会再次刷新了
}

[解决办法]
如楼上所说处理完成后重定向返回,response.sendRedirect( "*.jsp ");这个时候再刷新应该不会有问题了
[解决办法]
如楼上所说:点按纽也提交不了了。

叫孟子老大帮你想想办法吧,写个javaScript,不让它刷新什么的。
下班回家。。。
[解决办法]
用session对象 的isnew()方法判断用户是否是刷新页面
[解决办法]
request.getParameter( "Submit ")==null
[解决办法]
对,执行重定向,这个时候再刷新应该不会有问题了
[解决办法]
在重定向到test.jsp啊

[解决办法]
在form的action里写一个参数,或者在form里面写一个隐藏input(优先推荐),每次页面处理以检查这个参数来判断是否处理form即可。
[解决办法]
<input type= "submit " onclick= "this.form.action=this.form.acton+ '?submit=1 ' ">
加一个参数嘛,在下一组件里如果取得这个参数就说明是点击进入的嘛,这里要注意哦
如果你的from里的action里面已经有了“?”那么上面就要改成
<input type= "submit " onclick= "this.form.action=this.form.acton+ '&submit=1 ' ">

[解决办法]
由于是同一页面,不太适合RedirectAferPost
所以,采用令牌比较好,简单实现

A.jsp

session.setAttribute( "token ",new Integer(1));

B.jsp
<html> <head> </head>
<body>
<form id= "form1 " name= "form1 " method= "post " action= "test.jsp ">
<input type= "hidden " name= "token " value= " <%=session.getAttribute( "token ")%> "/>
<input type= "submit " name= "Submit " onclick= " " value= "确认 " />
</form>
<%
out.println(request.getMethod());
if(request.getMethod().equals( "POST "))
{
if(session.getAttribute( "token ").equals(request.getParameter( "token "))){


int i=Integer.valueOf(session.getAttribute( "token ").toString());
session.setAttribute( "token ",new Integer(i+1));
out.println( "点击进入 ");
}

}

%>

</body>
</html>
在生成页面的同时生成一个token,把它放在表单(form)的一个隐藏域里,并且把它放在session属性中。用户提交表单的时候,比较 form的token和session中的token是否一样,如果一样,修改session中的token(如果用户刷新,两个token就不一样),然后执行操作;如果不一样那就是重复提交的表单,不执行。


[解决办法]
一个简单办法,就是在前一个页面的按钮点击事件里,产生一个随机数(设计一下,让相邻两次产生的数不同,或用一个循环数列),随其它参数一起传到目标页。

在目标页把那个数字提出来,和在这个页面中用来对比的SESSION中的参数的值比较。如果不同,则认为是合理的,并把该值存入SESSION,继续处理其它环节。如果是F5刷新,则该数字仍是用上次前个页面传来的值,因此与SESSION中的值相同,就给出提示不处理。
[解决办法]
碧海情天的方法不错,值得思考。
[解决办法]
楼主,试试这个行不行,不行再调。
<%@ page contentType= "text/html;charset=GBK "%>
<html>
<head>
</head>

<body>
<form name= "form1 " method= "post " action= "test.jsp ">
<input type= "submit " name= "Submit " onClick= "this.form.action=this.form.action+ '?submit=1 ' " value= "确认 ">
</form>

<%
String str;
str=request.getParameter( "submit ");

if(str==null)
{
out.println( "还没操作! ");
}
else if(str.equals( "1 "))
{
out.println( "点击进入! ");
}
else
{
out.println( "返回 ");
}
%>

</body>
</html>

热点排行