看代码如下:  <%
  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>&nbsp;</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"这句,把上一次的表单中的内容 提交到了下一页面!!!为什么,会这样?请高手分析下,应该怎么避免呢!!!!!! 高分!!

解决方案 »

  1.   

    当 u==null 时 中间 <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>&nbsp;</td><td align="right"><input type=submit value="提交" onclick="return window.confirm('确定吗?') "></td></tr>
    </table>
    </form>都不显示了
      

  2.   

    if(u!=null){
    在这行单步调试一下,看代码跑进去没有
    程序是调出来的
      

  3.   

    是的 ,当u==null是 ,JSP页面是不显示 form 表单,但是数据仍然在提交!!!为什么????
    !!!
      

  4.   

    在<form action="UC?falg=8" method="post">设个断点,我估计不是在FORM中提交的
      

  5.   

    <input type="hidden" name="u" value=<%=u %>>吧
      

  6.   

    你在后面加一个  else{
    System.out.println("ok");
    }
    测试一下当u=null时可有输出学习过程中出现问题很正常,解决了就是自己的提高
      

  7.   

    当session 为空 时 ,通过属性 看一下当前的 jsp 源码,看看是不是源码中是不是有表单但是没有显示,
    有时候在jsp页面中,当得到某个作用域的值为空,页面会出现空白页面的
      

  8.   

    按钮本来就是提交按钮啊,不管你是否使用window.confirm("确定吗?")弹出确认消息框,表单都得提交...
      

  9.   

    onsubmit设置个javascript方法判断下
      

  10.   


    不是吧 他返回一个false的话 表单就不会提交的
      

  11.   

    JSP页面可以设置断点?
    建议加个else判断,并进行跳转试试。
      

  12.   

    JSP不可以设置断点?<%
    .....
    %>
    中间这段不可以设置?
      

  13.   

    当u==null或者过期的时候,JSP页面不显示表单,但表单却执行了 执行了action="UC?falg=8"这句,把上一次的表单中的内容 提交到了下一页面!!!
    没看明白这句?,是刚打开页面时表单就执行了?自动执行》?还是手动,不懂啥意思。
      

  14.   

    你确定action="UC?falg=8"是从你这个jsp提交过去的?定位:
    1)修改这个action,多加一个参数,比如改为action="UC?falg=8&source=this.jsp"。再检查看看其他地方有无组件也提交到UC。让他们的参数值不一样。
    2) 在UC这个web组件中添加打印,获取source参数,看看它的值是不是this.jsp。如果不是,说明action是从其他web组件提交到UC的。与这个jsp无关。
      

  15.   

    搞的这么复杂饿在 表单提交的时候验证下不就可以了嘛首先赋值给hidden变量,然后submit时候验证下
      

  16.   

    搞的这么复杂饿在 表单提交的时候验证下不就可以了嘛首先赋值给hidden变量,然后submit时候验证下
      

  17.   

    。我把代码复制来给大家看看,其实就是自己写的一个简单留言板块。
    在一个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>&nbsp;</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 就自动把刚才我输入的内容在提交一次。。为什么???!
      

  18.   

    问题 是当我正常的通过form表单往数据库添加内容,而其成功后。 我刷新页面 ,liu.jsp 就自动把刚才我输入的内容在提交一次。。你已经添加成功了 再刷新 不就是重新提交表单一次嘛 你是用的转发还是重定向?
      

  19.   

     request.getRequestDispatcher("liu.jsp").forward(request, response);
     你用的是重定向 换个转发试试
      

  20.   

    lvchao7758520
    你说的,用转发的方式的确可以避免这样的错误。但是为什么会这样。。如果用转发,那么UC中的 ArrayList aList=ubc.getliupage( pageNow);这种类型的数据,又该怎么传下去呢!!!
      

  21.   

    如果是转发 放在request里面传 是不可能的了 用session吧  如果数据量不大的话..
    关于 转发和重定向 看看这个链接
    http://blog.csdn.net/meiyalei/archive/2008/02/28/2129120.aspx
      

  22.   

    = =反了..如果重定向的话 放在request里的值 是取不到 的
      

  23.   

    问题 是当我正常的通过form表单往数据库添加内容,而其成功后。 我刷新页面 ,liu.jsp 就自动把刚才我输入的内容在提交一次。。这种问题 只会存在于用提交表单完成后转发到页面 他的查询和添加都在一个页面 你做个添加页面 用转发返回到添加页面看看  你刷新一下 你看会不会提示你重新提交表单?缓存只是存了你刚提交的数据好吧= =并不会帮你提交表单...
      

  24.   

    bb12152205gg缓存问题 ? 那该这样解决。。能给个思路或者说明下不!!!