。
看代码如下: <%
String u=(String)session.getAttribute("name");
if(u!=null){
%>
<hr><form action="UC?falg=8" method="post">
<table>
<tr><td>标题</td><td><input maxlength="30" type=text name=t size="83"></td></tr>
<tr><td><input type="hidden" name=name value=<%=u %>><%=u %></td><td><textarea name="c" rows="6" cols="70"></textarea></td></tr>
<tr><td> </td><td align="right"><input type=submit value="提交" onclick="return window.confirm('确定吗?') "></td></tr>
</table>
</form>
<%
}
%>
发生的异常现象如下:我用了个U来接受 session值,想达到,session值过期或者为空的时候不执行,form表单
但问题出现在,当u==null或者过期的时候,JSP页面不显示表单,但表单却执行了 执行了action="UC?falg=8"这句,把上一次的表单中的内容 提交到了下一页面!!!为什么,会这样?请高手分析下,应该怎么避免呢!!!!!! 高分!!
看代码如下: <%
String u=(String)session.getAttribute("name");
if(u!=null){
%>
<hr><form action="UC?falg=8" method="post">
<table>
<tr><td>标题</td><td><input maxlength="30" type=text name=t size="83"></td></tr>
<tr><td><input type="hidden" name=name value=<%=u %>><%=u %></td><td><textarea name="c" rows="6" cols="70"></textarea></td></tr>
<tr><td> </td><td align="right"><input type=submit value="提交" onclick="return window.confirm('确定吗?') "></td></tr>
</table>
</form>
<%
}
%>
发生的异常现象如下:我用了个U来接受 session值,想达到,session值过期或者为空的时候不执行,form表单
但问题出现在,当u==null或者过期的时候,JSP页面不显示表单,但表单却执行了 执行了action="UC?falg=8"这句,把上一次的表单中的内容 提交到了下一页面!!!为什么,会这样?请高手分析下,应该怎么避免呢!!!!!! 高分!!
<table>
<tr><td>标题</td><td><input maxlength="30" type=text name=t size="83"></td></tr>
<tr><td><input type="hidden" name=name value=<%=u %>><%=u %></td><td><textarea name="c" rows="6" cols="70"></textarea></td></tr>
<tr><td> </td><td align="right"><input type=submit value="提交" onclick="return window.confirm('确定吗?') "></td></tr>
</table>
</form>都不显示了
在这行单步调试一下,看代码跑进去没有
程序是调出来的
!!!
System.out.println("ok");
}
测试一下当u=null时可有输出学习过程中出现问题很正常,解决了就是自己的提高
有时候在jsp页面中,当得到某个作用域的值为空,页面会出现空白页面的
不是吧 他返回一个false的话 表单就不会提交的
建议加个else判断,并进行跳转试试。
.....
%>
中间这段不可以设置?
没看明白这句?,是刚打开页面时表单就执行了?自动执行》?还是手动,不懂啥意思。
1)修改这个action,多加一个参数,比如改为action="UC?falg=8&source=this.jsp"。再检查看看其他地方有无组件也提交到UC。让他们的参数值不一样。
2) 在UC这个web组件中添加打印,获取source参数,看看它的值是不是this.jsp。如果不是,说明action是从其他web组件提交到UC的。与这个jsp无关。
在一个JSP中实现 添加留言和显示留言的功能为(liu.jsp)。liu.JSP 页面<body>中的代码: <body bgcolor=#ced3ff><center>
<h1>留言页面</h1>
<%
String u=(String)session.getAttribute("name");
if(u==null){
response.sendRedirect("index.jsp");
System.out.println("u为空值的时候!");
return;
}
%>
<hr>
<form action="UC?falg=8" method="post">
<table>
<tr><td>标题</td><td><input maxlength="30" type=text name=t size="83"></td></tr>
<tr><td><input type="hidden" name=name value=<%=u %>><%=u %></td><td><textarea name="c" rows="6" cols="70"></textarea></td></tr>
<tr><td> </td><td align="right"><input type=submit value="提交" onclick="return window.confirm('确定吗?') "></td></tr>
</table>
</form>
</center>
<hr>
<%
ArrayList al=(ArrayList)request.getAttribute("al");
int pageCount=Integer.parseInt((String)request.getAttribute("p"));
int rowCount=Integer.parseInt((String)request.getAttribute("r"));
for(int i=0;i<al.size();i++){
LIUB liub=(LIUB)al.get(i);
%>
<table>
<tr><td>第<%=rowCount-i %>楼</td><td><%=liub.getTitle() %></td></tr>
<tr><td>用户名:<%=liub.getUsername() %><br>时间:<%=liub.getLdate() %></td><td><%=liub.getCont() %></td></tr>
</table>
<hr>
<%
}
String sp=request.getParameter("pageNow");
int pageNow=Integer.parseInt(sp);
if(pageNow!=1){
%>
<a href=UC?falg=7&pageNow=<%=(pageNow-1) %>>上一页</a>
<%
}
for(int i=pageNow;i<pageNow+3;i++){
if(i<pageCount){
%>
<A href=UC?falg=7&pageNow=<%=i %>><%=i %></A>
<%
}
}
if(pageNow!=pageCount&&pageCount!=0){
%>
<a href=UC?falg=7&pageNow=<%=(pageNow+1) %>>下一页</a>
<%
} %>
</body>
UC页面是用servlet写的。
UC中接收这个JSP页面的跳转 的代码是:
if(falg.equals("8")){
System.out.println("这里是把数据写入到数据库的控制器");
String name=request.getParameter("name");
String t=request.getParameter("t");
String c=request.getParameter("c");
if(ubc.ckliuyan(name, t, c)==false){//验证是否是相同内容的方法。
if(ubc.liu(name, t, c)){//插入方法
request.getRequestDispatcher("UC?falg=7&pageNow=1").forward(request, response);
}
else{
response.sendRedirect("Err.jsp");
}
}
else{
System.out.println("值是重复的时候!!!!");
response.sendRedirect("Err.jsp");
}
return;
}
if(falg.equals("7")){
System.out.println("这里是把数据显示出来的控制器");
String sp=request.getParameter("pageNow");
int pageNow=Integer.parseInt(sp);
ArrayList aList=ubc.getliupage( pageNow);
int rowCount=ubc.rowCount();
int pageCount=ubc.getpageCount();
request.setAttribute("r", rowCount+"");
request.setAttribute("p", pageCount+"");
request.setAttribute("al", aList);
request.getRequestDispatcher("liu.jsp").forward(request, response);
}问题再次重申。JSP页面中已经设置了 用session来判断 是否session为空或者过期,一旦为空或者过期就跳到index页面问题 是当我正常的通过form表单往数据库添加内容,而其成功后。 我刷新页面 ,liu.jsp 就自动把刚才我输入的内容在提交一次。。为什么???!
你用的是重定向 换个转发试试
你说的,用转发的方式的确可以避免这样的错误。但是为什么会这样。。如果用转发,那么UC中的 ArrayList aList=ubc.getliupage( pageNow);这种类型的数据,又该怎么传下去呢!!!
关于 转发和重定向 看看这个链接
http://blog.csdn.net/meiyalei/archive/2008/02/28/2129120.aspx