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>