我在验证“验证码”的时候,我不想把交给action去处理,而是想在验证码的显示页面中就进行验证,就出现了jsp把产生的随机数传给JavaScript使用的问题。在验证码生成的jsp文件中,session.setAttribute("rand",sRand);那么我在JavaScript中怎么才能取到这个值,或者不用session,还有其他办法吗?

解决方案 »

  1.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--var strSessionValue = <%=session.getAttribute("rand")%>;//-->
    </SCRIPT>
      

  2.   

    好,先谢谢楼上!你的方法是对的!
    呵呵,小弟初学,也是现学现用,请再赐教!
    我在javascipt写入了以下代码:
    <SCRIPT LANGUAGE="JavaScript">
     <!--  
       var rand = <%=session.getAttribute("rand")%>;
     //-->      if(!(rand==form.GetCode.value))
       {
          alert("请您输入正确的验证码!");
      form.GetCode.focus();
      return false;
    }</SCRIPT>却不知道为什么,即使写入的是正确的验证码,它也说是错误的,不晓得是为什么?
    是不是他们的字符之间还要转化?另外session.setAttribute("rand",sRand);中sRand是定义的为String类型
      

  3.   

    为什么我用
       document.write("rand="+rand);
       document.write("input="+input);  
    测试出的rand值和input值总是不同的啊?即使是在输入相同的情况下。
      

  4.   


    // 取随机产生的认证码(4位数字)
    String sRand="";
    for (int i=0;i<4;i++){
        String rand=String.valueOf(random.nextInt(10));
        sRand+=rand;
        // 将认证码显示到图象中
        g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        g.drawString(rand,13*i+6,16);
    }// 将认证码存入SESSION
    session.setAttribute("rand",sRand);
    这是生成验证码的关键部分!
    为什么在JavaScript中取到的rand值不正确呢?
      

  5.   

    var rand = '<%=session.getAttribute("rand")%>';
      

  6.   

    在同一页面不刷新的情况下又要以服务器代码取得验证码,又想用JS来接收一般是不行的,如果你不刷新页面是不能从request or session 中取得值的...
    不过你可以用一个隐藏的iframe来刷新再把从request or session中取得的值传给JS验证...
      

  7.   

    看来Student02370236说的是对的,我在当前页面每次取得值总不是生成的随机数,而转到另外一个jsp中就好了。我再搞一个隐藏的iframe看看。呵呵,这个东西还不会搞呢,-_-:
      

  8.   

    请问Student02370236,如何设置可以达到你说得效果?<iframe frameborder=0 width=170 height=100 marginheight=0 marginwidth=0 scrolling=no src="move-ad.htm"></iframe>
      

  9.   

    正确写法:<SCRIPT LANGUAGE="JavaScript">
     <!--  
       var rand = "<%=session.getAttribute("rand")%>"; //jsp是原样显示,它是不知道你的javascript想要什么类型的,如果不用引号括起来,就成了整型了,或者什么都不是(非数字的时),而表单的值是字符串类型
     //-->      if(rand != form.GetCode.value))
       {
          alert("请您输入正确的验证码!");
      form.GetCode.focus();
      return false;
       }</SCRIPT>
      

  10.   

    回复亲爱的朋友们:
    谢谢你们的帮助。
      indeed(indeed) :您的语句中的确是少一个"",   ^_^
      marenjie(sonija) :您的方法我也试过了,效果和==是一样的;
      raul07(Raul07)和yoyodd(蓝梦丁丁):您们说得方法是正确的取值方法;呵呵,对于“把jsp的参数传给JavaScript”这个问题而言,上面的方法是正确。
      

  11.   

    可是我这里的方式有些特殊,也是不太现实的。在生成验证码的网页中,生成验证码的图片是链接一个jsp文件,所以就像Student02370236说的"在同一页面不刷新的情况下又要以服务器代码取得验证码,又想用JS来接收一般是不行的,如果你不刷新页面是不能从request or session 中取得值的..."
    这样,如果我们真要在当前页面用javascript取jsp中session的属性值,那么得到总是你上一次生成的验证码,而不是当前页面生成的验证码.后来我又从其他地方看了看源代码,他们的处理方法是,在当前页面生成验证码之后,然后转向另外一个jsp文件进行处理,这样就可以完成正常的验证过程.另外,dachan333(大蝉)说的也有理,可能会对网页的安全性造成一定的影响.
      

  12.   

    呵呵,xylwqwtd(阿)、bandittalent() 和best_threewood(Do it !) 大家共同学习的哦!!