您的位置:程序门 -> java -> web 开发



jsp中判断页面是刷新进入还是按钮点击进入


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


jsp中判断页面是刷新进入还是按钮点击进入
发表于:2007-08-08 18:03:26 楼主
我写了个简单的页面,里面有个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的,如果才能达到需要的结果?   将 "确定 "的情况区分开来.
发表于:2007-08-08 18:14:331楼 得分:0
if(request.getmethod().equals( "post "))
      {
          out.println( "点击进入 ");//处理完毕后一般执行重定向,就不会再次刷新了
      }
发表于:2007-08-08 18:39:462楼 得分:0
如楼上所说处理完成后重定向返回,response.sendredirect( "*.jsp ");这个时候再刷新应该不会有问题了
发表于:2007-08-08 19:11:483楼 得分:0
如楼上所说:点按纽也提交不了了。

叫孟子老大帮你想想办法吧,写个javascript,不让它刷新什么的。
下班回家。。。
发表于:2007-08-08 19:19:574楼 得分:0
用session对象   的isnew()方法判断用户是否是刷新页面
发表于:2007-08-08 20:46:075楼 得分:0
request.getparameter( "submit ")==null
发表于:2007-08-08 21:00:376楼 得分:0
对,执行重定向,这个时候再刷新应该不会有问题了
发表于:2007-08-08 23:40:337楼 得分:0
各位老大,在out.println( "点击进入 ");后还有数据要显示,所以不能重定向.
发表于:2007-08-08 23:57:058楼 得分:0
在重定向到test.jsp啊
发表于:2007-08-09 16:38:249楼 得分:0
在form的action里写一个参数,或者在form里面写一个隐藏input(优先推荐),每次页面处理以检查这个参数来判断是否处理form即可。
发表于:2007-08-09 16:40:1410楼 得分:0
补充一下:那个参数把值固定
发表于:2007-08-09 16:49:3911楼 得分:0
再提供一个不太牢靠的辅助检查的前提条件:检查refer报头,
发表于:2007-08-09 16:59:3612楼 得分:0
<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 ' ">
发表于:2007-08-09 17:46:4413楼 得分:0
由于是同一页面,不太适合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就不一样),然后执行操作;如果不一样那就是重复提交的表单,不执行。

发表于:2007-08-09 18:34:4114楼 得分:0
一个简单办法,就是在前一个页面的按钮点击事件里,产生一个随机数(设计一下,让相邻两次产生的数不同,或用一个循环数列),随其它参数一起传到目标页。

在目标页把那个数字提出来,和在这个页面中用来对比的session中的参数的值比较。如果不同,则认为是合理的,并把该值存入session,继续处理其它环节。如果是f5刷新,则该数字仍是用上次前个页面传来的值,因此与session中的值相同,就给出提示不处理。
发表于:2007-08-09 18:42:2615楼 得分:0
碧海情天的方法不错,值得思考。
发表于:2007-08-09 20:40:1116楼 得分:0
楼主,试试这个行不行,不行再调。
<%@   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>


快速检索

最新资讯
热门点击