起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5158|回复: 11

[结贴] 图形验证码的问题

  [复制链接]

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
发表于 2015-5-6 13:08:21 | 显示全部楼层 |阅读模式
开发一个注册程序,可以短息验证、图形验证 编了个图形验证码程序,点击按钮,在img文件夹生成一个图形验证码图片CheckCode.png
<div component="$UI/system/components/justep/data/data" autoLoad="false"
      xid="statusData" autoNew="true" idColumn="calcCanSaveOrder">
      <column labe1="fImage" name="fImage" type="String" xid="default13"/>  
      <column labe2="calcImageURL" name="calcImageURL" type="String" xid="default12"/>  
      <rule xid="rule1">
        <col name="calcImageURL" xid="ruleCol1">
          <calculate xid="calculate1">
            <expr xid="default14">$model.transURL('./img/'+val('fImage'))</expr>
          </calculate>
        </col>
      </rule>
    </div>


       
        //生成图形验证码
        Model.prototype.SCTxCodeClick = function(event) {
       
            var statusData   =   this.comp("statusData");
          
                var params = {"TxCodeUrl"   :   statusData.val("fImage")};
               
            var success = function(resultData)
        {
          //拿到从后台返回的验证码
          this._TxCode = resultData.CheckCode;
          alert( this._TxCode);
        };
                Baas.sendRequest({
                        "url"     : "/takeout",
                        "action"  : "TxCode",
                        "params"  : params,
                        "success" : success
                });
               

               
               
        };       

然而点击换一张按钮,页面上的图形验证码不变,是什么原因
1.png

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2015-5-6 15:46:13 | 显示全部楼层
那就在按钮的点击事件中跟踪一下看看具体到什么地方错的
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:39:22 | 显示全部楼层
没有错,新生成的图片没有加载进去
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:41:36 | 显示全部楼层
后台的java程序生成的图形验证码是成功的,也存到img文件下,可是在imgae组件里,图片没有刷新出来
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:42:44 | 显示全部楼层
private static void TxCode(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException , Exception
        {
                JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params"));
                String TxCodeUrl = params.getString("TxCodeUrl");
                System.out.println(TxCodeUrl);
                File directory = new File("");//参数为空
                String courseFile = directory.getCanonicalPath() ;
               
                courseFile= new File(courseFile).getParent(); //获取上一级目录
                TxCodeUrl=courseFile+"\\model\\UI2\\weixinapp\\img\\"+TxCodeUrl;
                ValidateCode vCode = new ValidateCode(120,40,5,100);
                try {  
            System.out.println(vCode.getCode()+" >"+TxCodeUrl);  
            vCode.write(TxCodeUrl);  
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("CheckCode", vCode.getCode());
            Util.writeJsonToResponse(response, jsonObj);
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
       
       
        }



package com.justep.baas.takeout;

import java.awt.Color;  
import java.awt.Font;  
import java.awt.Graphics2D;  
import java.awt.image.BufferedImage;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.OutputStream;  
import java.util.Random;  
  
import javax.imageio.ImageIO;  
/**
* 验证码生成器
* @author dsna
*
*/  
public class ValidateCode {  
    // 图片的宽度。  
    private int width = 160;  
    // 图片的高度。  
    private int height = 40;  
    // 验证码字符个数  
    private int codeCount = 5;  
    // 验证码干扰线数  
    private int lineCount = 150;  
    // 验证码  
    private String code = null;  
    // 验证码图片Buffer  
    private BufferedImage buffImg=null;  
  
    private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
            'K', 'L', 'M', 'N',  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  
            'X', 'Y', 'Z',  '1', '2', '3', '4', '5', '6', '7', '8', '9' };  
  
    public  ValidateCode() {  
        this.createCode();  
    }  
  
    /**
     *  
     * @param width 图片宽
     * @param height 图片高
     */  
    public  ValidateCode(int width,int height) {  
        this.width=width;  
        this.height=height;  
        this.createCode();  
    }  
    /**
     *  
     * @param width 图片宽
     * @param height 图片高
     * @param codeCount 字符个数
     * @param lineCount 干扰线条数
     */  
    public  ValidateCode(int width,int height,int codeCount,int lineCount) {  
        this.width=width;  
        this.height=height;  
        this.codeCount=codeCount;  
        this.lineCount=lineCount;  
        this.createCode();  
    }  
      
    public void createCode() {  
        int x = 0,fontHeight=0,codeY=0;  
        int red = 0, green = 0, blue = 0;  
         
        x = width / (codeCount +2);//每个字符的宽度  
        fontHeight = height - 2;//字体的高度  
        codeY = height - 4;  
         
        // 图像buffer  
        buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
        Graphics2D g = buffImg.createGraphics();  
        // 生成随机数  
        Random random = new Random();  
        // 将图像填充为白色  
        g.setColor(Color.WHITE);  
        g.fillRect(0, 0, width, height);  
        // 创建字体  
        ImgFontByte imgFont=new ImgFontByte();  
        Font font =imgFont.getFont(fontHeight);  
        g.setFont(font);  
         
        for (int i = 0; i < lineCount; i++) {  
            int xs = random.nextInt(width);  
            int ys = random.nextInt(height);  
            int xe = xs+random.nextInt(width/8);  
            int ye = ys+random.nextInt(height/8);  
            red = random.nextInt(255);  
            green = random.nextInt(255);  
            blue = random.nextInt(255);  
            g.setColor(new Color(red, green, blue));  
            g.drawLine(xs, ys, xe, ye);  
        }  
         
        // randomCode记录随机产生的验证码  
        StringBuffer randomCode = new StringBuffer();  
        // 随机产生codeCount个字符的验证码。  
        for (int i = 0; i < codeCount; i++) {  
            String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);  
            // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。  
            red = random.nextInt(255);  
            green = random.nextInt(255);  
            blue = random.nextInt(255);  
            g.setColor(new Color(red, green, blue));  
            g.drawString(strRand, (i + 1) * x, codeY);  
            // 将产生的四个随机数组合在一起。  
            randomCode.append(strRand);  
        }  
        // 将四位数字的验证码保存到Session中。  
        code=randomCode.toString();
        System.out.println("55555555555="+code);
    }  
      
    public void write(String path) throws IOException {  
            System.out.println("55555555555="+path);
        OutputStream sos = new FileOutputStream(path);  
            this.write(sos);  
    }  
      
    public void write(OutputStream sos) throws IOException {  
            ImageIO.write(buffImg, "png", sos);  
            sos.close();  
    }  
    public BufferedImage getBuffImg() {  
        return buffImg;  
    }  
      
    public String getCode() {  
        return code;  
    }  
}  

回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:43:40 | 显示全部楼层
//生成图形验证码
        Model.prototype.SCTxCodeClick = function(event) {
       
            var statusData   =   this.comp("statusData");
          
                var params = {"TxCodeUrl"   :   statusData.val("fImage")};
               
            var success = function(resultData)
        {
          //拿到从后台返回的验证码
          this._TxCode = resultData.CheckCode;
          alert( this._TxCode);
        };
                Baas.sendRequest({
                        "url"     : "/takeout",
                        "action"  : "TxCode",
                        "params"  : params,
                        "success" : success
                });
               
     
               
               
        };       
               
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:46:16 | 显示全部楼层
<div component="$UI/system/components/justep/labelEdit/labelEdit"
              class="x-label-edit" xid="labelInput7">
              <label class="x-label" xid="label6" style="width:70px;font-size:16px;">校验码*</label>  
              <input component="$UI/system/components/justep/input/input" class="form-control x-edit"
                xid="yzm" placeHolder="(必填)" style="font-size:16px;"/>  
              <div class="x-titlebar-left" style="width:120px;">
                <img alt="" xid="image1" style="height:auto;width:auto;" class="img-rounded"
                  bind-attr-src=" $model.statusData.val(&quot;calcImageURL&quot;)" bind-click="(event)"/>
              </div>  
              <div class="x-titlebar-left">
                <a component="$UI/system/components/justep/button/button"
                  class="btn btn-default" label="换一张" xid="button2" style="font-size:12px;"
                  onClick="SCTxCodeClick">
                  <i xid="i1"/>  
                  <span xid="span3">换一张</span>
                </a>
              </div>
            </div>
          </div>  
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 17:49:25 | 显示全部楼层
xid="image1“ 组件,图片文件名不变,但内容变了,是不是要刷新一下。
动态图片,是从数据集传来的,参照外卖菜单页面的,菜单图片的例子。
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-6 19:24:45 | 显示全部楼层
我重新刷新网页,验证码就该变了,重新刷新网页的js语句如何写
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2015-5-7 08:48:55 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-18 17:37 , Processed in 0.063838 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表