struts在actionform验证不通过,反回INPUT页面时,验证码图片不显示。
验证码是通过jsp页面输出的,好像是反回到input页面后不请求这个验证码的生成页面
该怎么解决?

解决方案 »

  1.   

    1,把代码贴出来
    2,肯定是程序的问题,返回input页面的时候肯定要重新执行input页面的东西,不
       是不是request之类的东西有问题了。
      

  2.   

    我估计是你从action页面跳转到input页面的时候采用的页面转发,你看看你的浏览器地址,在看看你验证码的图片路径,分析一下就知道了,建议改成重定向就可以解决了
      

  3.   

    谢谢各位的帮忙
    <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" language="java" pageEncoding="utf-8"%>
    <%!  
      Color getRandColor(int   fc,int   bc)   
      {   
      Random   random   =   new   Random();   
      if(fc>255)   fc=255;   
      if(bc>255)   bc=255;   
      int   r=fc+random.nextInt(bc-fc);   
      int   g=fc+random.nextInt(bc-fc);   
      int   b=fc+random.nextInt(bc-fc);   
      return   new   Color(r,g,b);   
      }   
      %>   
      <%   
      //out.clear();//这句针对resin服务器,如果是tomacat可以不要这句   
      response.setHeader("pragma","no-cache");   
      response.setHeader("cache-Control","no-cache");   
      response.setDateHeader("expires",0);   
      
      int   width=60,   height=20;   
      BufferedImage   image   =   new   BufferedImage(width,   height,   BufferedImage.TYPE_INT_RGB);   
        
        
      Graphics   g   =   image.getGraphics();   
      Random   random   =   new   Random();   
        
      g.setColor(getRandColor(200,250));   
      g.fillRect(0,   0,   width,   height);   
        
      g.setFont(new   Font("Times   New   Roman",Font.PLAIN,18));   
        
        
        
      g.setColor(getRandColor(160,200));   
      for   (int   i=0;i<155;i++)   
      {   
      int   x   =   random.nextInt(width);   
      int   y   =   random.nextInt(height);   
      int   xl   =   random.nextInt(10);   
      int   yl   =   random.nextInt(10);   
      g.drawLine(x,y,x+xl,y+yl);   
      }   
        
      char   c[]   =   new   char[62];   
        
      for   (int   i   =   97,   j   =   0;   i   <   123;   i++,   j++)   {   
      c[j]   =   (char)   i;   
      }   
      for   (int   o   =   65,   p   =   26;   o   <   91;   o++,   p++)   {   
      c[p]   =   (char)   o;   
      }   
      for   (int   m   =   48,   n   =   52;   m   <   58;   m++,   n++)   {   
      c[n]   =   (char)   m;   
      }                   
      String   sRand="";   
      for   (int   i=0;i<4;i++){   
      int   x   =   random.nextInt(62);   
      String   rand=String.valueOf(c[x]);   
      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);  
      g.dispose();   
      ImageIO.setUseCache(true);   
      ImageIO.write(image,"JPEG",response.getOutputStream());
      out.clear();
      out=pageContext.pushBody();
     %>
    就是这个页面,只有在验证错误返回input页面的时候不能显示图片
      

  4.   

    wangxf_8341 
    你说的改成重定向是怎么回事?
      

  5.   

    确实是不再执行验证码生成页面了
    我再强调一下,是在actionform中验证失败到action中配置的input页面后出现这个问题的
      

  6.   

    重定向是在action配制的时候加一句indirect="true"(把那个复选框勾上),然后用session传值
      

  7.   

    郁闷了,原来用的是<img>标签,现在改成<html:img>就没有那个问题了
    谁知道是为什么啊?
    还有就是在用<img>的时候反回的URL里有jsessiononid,改为<html:img>后就没有了,而且还会出现问题
      

  8.   

    我还是新手哈
    我说说我的看法
    <html:img>是一个java类吧
    你运行标签实际就是运行一个类
    所以他就能显示出来