<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="checkLogin.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>成功登陆</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <script language="JavaScript">
  
      function stop()
      {
          <% session.setAttribute("formAction", "stop"); %>
          
          form.action = "agentsTracker";
          form.submit();          
      }
      
      
      function start()
      {
          <% session.setAttribute("formAction", "start"); %>
          
          form.action = "agentsTracker";
          form.submit();
      }
      
      function tmp()
      {
          <% session.setAttribute("formAction", "tmp"); %>
      }
      
      
  </script>
  
  <body>
    <h1>欢迎您</h1>
    ${sessionScope.name}
    
    <form name="form" id="form" method="post" action="agentsTracker">
      <input type="button" name="startBtn" onClick="start()" value="start">
      <input type="button" name="stopBtn" onClick="stop()" value="stop">
      <input type="submit" name="submit" value="ok">
      
    </form>
  </body>
</html>
不管点击哪个按钮,servlet接收到的session.getAttribute("formAction")都是"tmp",刚接触jsp,不知道是哪出错了

解决方案 »

  1.   

    你看下在点击按钮之前,有没有调用下面这个函数
     function tmp()
          {
              <% session.setAttribute("formAction", "tmp"); %>
          }
    因为值是保存在session里边,所以你setAttribute进去的东西,它会在你没有重启浏览器或者服务的情况下存在,再者因为你start()和stop()里边的 session.setAttribute("formAction", "stop");和 session.setAttribute("formAction", "start");key都为formAction和<% session.setAttribute("formAction", "tmp"); %>中重复了,setAttribute(key,value);中的key不应该有重复的,你检查下这两方面
      

  2.   

    我知道是重复了,这个tmp()是我测试用后加上的的,因为之前不管怎么都是取得最后一个函数的值,就如上面的代码,start()在后面,所以session里的formAction就总是为start。所以我加了一个tmp()上去,果然session里的formAction就一直为tmp了,我就怀疑是不是函数自己执行了
      

  3.   


    不杂乱吧,我就加了一个表单和三个函数,最后一个函数tmp()是为了证实是不是在网页加载时就执行了,或者是点击按钮的时候,三个函数一起执行了
      

  4.   

    jsp在服务器上就执行了,javascript是在客户端的浏览器里执行的
    你明我意思吧!
      

  5.   

    function stop()
    {
      <% session.setAttribute("formAction", "stop"); %>
      
      form.action = "agentsTracker";
      form.submit();
    }
    红色的代码是服务端执行的,也就是你这个页面加载的时候就已经执行了,楼主可以访问一下这个JSP之后,在浏览器中看一下页面源代码,应该是看不到session.setAtt……的,因为它是服务端执行的东西,其他几个function中也是一样的,所以最后的session.setAttribute("formAction", "tmp");就覆盖了以前设置的formAction。不知道我有没有说明白。总之楼主需要明白什么代码是客户端执行的,什么代码是客户端执行的就OK了。
      

  6.   

    <% session.setAttribute("formAction", "stop"); %>
    这行是jsp中使用的java代码,和js函数无关,会默认执行的。如果你需要向后台传值不应该使用这种方法。
    楼主action跳转的代码和我的不一样,不知道是否是因为action类文件中只有一个方法的原因所以简写了。
    我的写法是
    form.action = "agentsTracker.do?method=action中方法名&formAction=stop";
    form.submit();
    楼主这个写法可以尝试下
    form.action = "agentsTracker?formAction=stop";
    form.submit();
      

  7.   

    补充一下,之前的写法即将参数在action路径中传递了。不需要写之前的
    <% session.setAttribute("formAction", "stop"); %>
    这种java代码了。
      

  8.   


    果然证实了我的猜想,谢谢。
    现在的问题是,我怎么使用js通过session传值呢,按理说js是不能操作服务端的session吧,
    本来打算用request来传值的,但是又超过范围了,只好使用session了
      

  9.   

    补充一下,因为我要传java对象,隐藏域,url等传参都不能满足,所以只能从session入手,传过去了再remove掉
      

  10.   

    首先,三个js函数可以合并成一个,给函数传一个参数就行。其次,session.setAttribute("formAction", "stop")这种代码最好不要放在jsp中处理。
      

  11.   

    你可以通过路径传参数,比如你把stop等值传递到后台,然后在后台建一个formAction的对象,用formAction.setXXX的方法把stop的值再赋值给这个对象嘛,这样可以实现么?
      

  12.   

    我现在希望能用session传对象,比如session.setAttribute("memberList", ListObject),把一个列表传到后台
      

  13.   

    我有些摸不清楚了,很多人都用过session传值,如果在jsp不能写这种代码,那怎么传呢?
      

  14.   

    session是服务端的东东,试试ajax吧!