精华内容
下载资源
问答
  • 我们知道,在学习Struts2时,如果验证方法为validat

    我们知道,在学习Struts2时,如果验证方法为validateXxx那么,他所对应的验证 action的名字应该是xxx(即将首字母小写),但是现在有这样种情况如下:


           <action name="admin_*" class="com.yxq.action.AdminAction" method="{1}">
                <result name="input">/pages/admin/view/AdminTemp.jsp</result>
                <result name="checkSuccess" type="redirectAction">
                    <param name="actionName">admin_*</param>
                    <param name="method">ListShow</param>
                </result>
                <result name="deleteSuccess" type="redirectAction">
                    admin_ListShow.action
                </result>
            </action>

    程序代码中有public void validateListShow()方法

    其中一个Action类有多个对应的方法,我们使用通配符来经行配置,而validateListShow()验证了Action类中的ListShow()方法,此时,是不需要将方法的首字母小写为listShow()的。

    展开全文
  • TField validate

    2008-06-28 10:55:00
    同c#一样,delphi对事件的处理也使用相同的逻辑,举例而言,用validate方法来触发onvalidate(从命名上来看,正好相反,c#用onxxx触发xxx事件) 在C#(.net)中,onxxx方法必定是virtual 的,这样,用户可以覆盖缺省的...
    同c#一样,delphi对事件的处理也使用相同的逻辑,举例而言,用validate方法来触发onvalidate(从命名上来看,正好相反,c#用onxxx触发xxx事件)

    在C#(.net)中,onxxx方法必定是virtual 的,这样,用户可以覆盖缺省的事件处理句柄。

    在.net 中,事件是用delegate来处理的,delegate可以处理多个过程,用+=,-=来达成,在delphi中,过程指针可以指向一个事件,但同时只能有一个过程指针

    我试图写一些TsbfXXXField来,来对从原数据获取的列定义做缺省的处理,像required,unique和一些其它通用的校验,理想的,应该是覆盖delphi的validate方法,但结果,居然发现它不是虚的。 我只有实现onvalidate时间,但是,这样,我的脚本处理程序无法再在外部定制它。这是个问题。

    小地方,反映了delphi的设计,还是有些问题

    转载于:https://www.cnblogs.com/jjx/archive/2008/06/28/1231538.html

    展开全文
  • Struts2的输入校验有两种方式:一种是用Action中定义的validate()方法进行校验,一种是用Struts2定义好的校验框架进行校验。前者里面的逻辑判断要自己写,而后者只需要传递相应的参数即可。 不管是哪种方式,程序...

    Struts2的输入校验有两种方式:一种是用Action中定义的validate()方法进行校验,一种是用Struts2定义好的校验框架进行校验。前者里面的逻辑判断要自己写,而后者只需要传递相应的参数即可。

    不管是哪种方式,程序执行的流程都是一样的,执行流程如下:

    1、对表单传递过来的数据,先进行类型转换

    2、执行校验

    3、若校验不合法,则跳转到以input命名的result页面,若合法,则跳转到指定的页面


    下面举例来说明用Action中定义的validate()方法进行校验这种方式(第二种方式在下一篇博客中说明):

    这种方法,是在Action中用其中的validate()方法进行校验,如下例:

    其中的EMail是自定义的数据类型,要编写类型转换器,进行类型转换,详情看上一篇博客。这里为了更清晰的介绍执行流程,所以加上一个自定义的数据类型的属性。

    package com.suo.actions;
    
    import java.util.Calendar;
    import java.util.Date;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.suo.beans.EMail;
    
    /**
     * 处理用户注册的Action,其中uername,password,birthday,Struts2都提供了内部的类型转换,
     * 但是对于自定义的EMail,就要自己编写类型转换的代码,以满足条件。
     * @author hackerain
     */
    public class RegisterAction extends ActionSupport 
    {
    	private String username;
    	private String password;
    	private String repassword;
    	private Date birthday;//Struts2已提供了内部的类型转换器
    	private int age;
    	private EMail email;//自定义数据类型,要编写类型转换器,以进行类型转换
    	
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getRepassword() {
    		return repassword;
    	}
    
    	public void setRepassword(String repassword) {
    		this.repassword = repassword;
    	}
    
    	public Date getBirthday() {
    		return birthday;
    	}
    
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public EMail getEmail() {
    		return email;
    	}
    
    	public void setEmail(EMail email) {
    		this.email = email;
    	}
    
    	/**
    	 * execute()覆盖父类中的方法,进行总的业务处理
    	 */
    	public String execute() throws Exception {
    		System.out.println(username);
    		System.out.println(password);
    		System.out.println(birthday);
    		System.out.println("age");
    		System.out.println(email.getFormer());
    		System.out.println(email.getLatter());
    		
    		return SUCCESS;
    	}
    
    	/**
    	 * 验证方法,覆盖父类中的validate(),对属性进行验证:
    	 * 用户名介于4——6个字符之间,且不能为空,
    	 * 密码介于4——6个字符之间,且不能为空,
    	 * 两次输入的密码要一致,
    	 * 生日要大于1900-01-01,小于当前日期,
    	 * 邮箱要为qq邮箱、163邮箱、yahoo邮箱三者中的一个。
    	 * 若输入的信息不合法,则会默认跳转到以"input"为命名的<result>页面,进行重新输入。
    	 */
    	public void validate() {
    		if(username==null || username.length()<4 || username.length()>6)
    		{
    			this.addActionError("username error !");
    		}
    		
    		if(password==null || password.length()<4 || password.length()>6)
    		{
    			this.addActionError("password error !");
    		}
    		else if(repassword==null || repassword.length()<4 || repassword.length()>6)
    		{
    			this.addActionError("repassword error !");
    		}
    		else if(!password.equals(repassword))
    		{
    			this.addActionError("passwords are different !");
    		}
    		
    		if(birthday==null)
    		{
    			this.addActionError("birthday is invalid !");
    		}
    		else
    		{
    			Calendar birthCal=Calendar.getInstance();
    			birthCal.setTime(birthday);
    			
    			Date now=new Date();
    			Calendar upperCal=Calendar.getInstance();
    			upperCal.setTime(now);
    			
    			Calendar lowerCal=Calendar.getInstance();
    			lowerCal.set(1900, 1, 1);
    			
    			if(!(lowerCal.before(birthCal) && birthCal.before(upperCal)))
    			{
    				this.addActionError("birthday should be between 1900-01-01 to now !");
    			}
    		}
    		
    		if(age<10 || age>50)
    		{
    			this.addActionError("age should be between 10 and 50");
    		}
    		
    		if(email==null)
    		{
    			this.addActionError("email is invalid !");
    		}
    		else
    		{
    			if(!(email.getLatter().equals("qq.com") || email.getLatter().equals("163.com") ||
    			   email.getLatter().equals("yahoo.com.cn")))
    			{
    				this.addActionError("email should be among qq.com, 163.com and yahoo.com.cn !");
    			}
    		}
    		
    		//this.clearErrors();
    	}
    }
    

    关于错误信息的处理,有两种方式,一种是addActionError(),另一种是addFieldError(),关于两者的区别,如下:

            在校验前,即执行validate()方法前,先要进行类型转换,若类型转换发生错误,则Struts会自动将错误信息放到相应的属性错误字段中,即调用addFieldError()方法,添加到其中的错误信息也是Struts2默认的;然后,调用set方法时,由于类型转换发生错误,所以会找不到对应属性的set方法,从而使得该属性值在Action中为默认值;
            在校验时,即执行validate()方法时,若有不合法的属性,此时,若指定了添加错误信息的方式,addFieldError()或addActionError(),则只会相应的执行指定的方法,并且会累加,即写了几次该方法,就会添加几次错误信息,因为在底层添加的错误信息是存储在一个ArrayList<String>数组中的,不会覆盖原来的错误信息。
            总得来说,在类型转换发生异常是,addFieldError()会由struts2自动调用,而addActionError()是在Action中显示调用的,但是addFieldError()也可以在Action中显示调用。

    在发生类型转换异常时,Struts2会自动调用addFieldError(),向ArrayList<String>数组中添加错误信息,但是添加的错误信息是Struts2默认的:Invalid field value for field "xxx"其实也可以自己定义字段级别的错误信息,方法如下:

    1、在该Action所在的包中,添加一个以该Action的类名为文件名的properties文件。

    2、在其中指定key和value

       key有固定的格式:invalid.fieldvalue. + Action中要检验的属性名,如:invalid.fieldvalue.username;

       value就是自己定义的错误信息了。

       注意,若自定义的错误信息是中文的话,则应选择Properties模式,进行编辑,因为中文是以UNICODE进行表示的。

    如本例中的自定义错误信息的properties文件名为:RegisterAction.properties,内容为:

    invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u5408\u6CD5
    invalid.fieldvalue.password=\u5BC6\u7801\u4E0D\u5408\u6CD5
    invalid.fieldvalue.birthday=\u751F\u65E5\u4E0D\u5408\u6CD5
    invalid.fieldvalue.age=age should be between 10 and 50
    invalid.fieldvalue.email=\u90AE\u7BB1\u4E0D\u5408\u6CD5
    age属性的错误信息是用英文写的,其他的属性是用中文写的,在源代码模式下,显示的就是中文的ascii编码



    展开全文
  • django restfremwork serializer的validate机制

    千次阅读 2019-05-23 17:04:02
    使用DRF去创建标准API的时候有一个日常操作就是serializer.is_valid(),用于检查序列...在自定义的serializer内自定义validate方法名用validate和要做特殊检查的字段用下划线连起来命名就可以直接检查,比如要实现...

           使用DRF去创建标准API的时候有一个日常操作就是serializer.is_valid(),用于检查序列化对象serializer是否合规,这个方法有一个参数叫raise_exception(boolean值),用于控制是不是抛出错误啥的。在自定义的serializer内自定义validate,方法名用validate和要做特殊检查的字段用下划线连起来命名就可以直接检查,比如要实现一个需求,邻居都不能姓王,那么就需要在自己对应的serializer内新增一个叫做validata_name的方法,可以这样写

    class NeighbourSerializer(serializers.Serializer):
        """
        邻居们的序列化
        """
    
        ......
        ......
        name = serializers.CharField(max_length=100, allow_null=False)
        def validate_name(self, value):
            if value.first_name == '王':
                raise serializers.ValidationError(u'隔壁怎么可以姓王?')

            这个时候当代码运行起来会发现is_valid()时会自动进行检查,假如是我,我估计是拼接字符串,validate_当标志,后面拼上field名称当方法名然后调用。但是依然很好奇框架作者大神是如何实现的,所以看了看源码,整个调用流程是从is_valid()方法开始的,is_valid()内部会调用run_validation(data),然后run_validation()(注意,这个run_validation是Serializer类的,而不是Field的,rest_fremwork下自己封装的field也有一套名称一模一样的方法,跟踪的时候容易跟错),然后在run_validation内部会调用另外一个方法,叫做to_internal_value(data),这个方法是自定义validate的关键,源码如下:

    def to_internal_value(self, data):
        """
        Dict of native values <- Dict of primitive datatypes.
        基本数据类型  ->  本地数据类型(我理解就是Serializer自己认的数据类型),顾注释思义!这玩意儿是用来使数据类型啥的变成合 乎自己逻辑的。
        """
        if not isinstance(data, Mapping):
            message = self.error_messages['invalid'].format(
                datatype=type(data).__name__
            )
            raise ValidationError({
                api_settings.NON_FIELD_ERRORS_KEY: [message]
            }, code='invalid')
    
        ret = OrderedDict()
        errors = OrderedDict()
        fields = self._writable_fields
    
        for field in fields:
            # 这里的fields内容就是我们在自定义的Serializer子类内标明的字段
            validate_method = getattr(self, 'validate_' + field.field_name, None)
            # 这一行果不其然用字符串拼接方法名的方式去获取对应的validate方法
            primitive_value = field.get_value(data)
            try:
                validated_value = field.run_validation(primitive_value)
                # 这一行就是上面说道的field也有一套validate的方法用于校验字段
                if validate_method is not None:
                    validated_value = validate_method(validated_value)
                    # 此处对自定义的validate方法进行了调用
            except ValidationError as exc:
                errors[field.field_name] = exc.detail
            except DjangoValidationError as exc:
                errors[field.field_name] = get_error_detail(exc)
            except SkipField:
                pass
            else:
                set_value(ret, field.source_attrs, validated_value)
    
        if errors:
            raise ValidationError(errors)
    
        return ret

    结论:

    1.自定义validate底层就是使用的字符串拼接,所以在使用这个机制的时候尽量复制粘贴field的名称避免单词拼写问题。

    2.方法内读取的fields是直接self内去获取的Serializer自身定义过的field而不是Model内的,所以要使用这一机制,务必在自己的Serializer内创建对应的field.

    展开全文
  • 1.引用jquery.js、jquery.validate.js、messages_cn.js(我这里应用的都是min的,就是精简的,没有空格什么的,...3在加载事件中调用validate方法 $(document).ready(function () { $('#form1').validate({
  • 一、基于配置文件的验证,这种验证只适合简单的格式验证不用于后台逻辑验证跟action位于同一个包下命名为xxaction-validation.xml 这是全局验证要是action里面有很多个方法对具体方法验证则xxaction-xx...
  • TP5.1出现这样的错误Fatal error: Class ‘app\common\validate\BaseValidate’ not found 错误截图 方法一 出现这样的错误,第一件事就是检查相应的路径下面是否有该文件 方法二 检查命名空间是否严格跟随路径保持...
  • 报这种错可能有以下两种情况 1.属性绑定错误,确保绑定的是 :model 而不是v-model !...validate 是element-ui 里面对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调...
  • 路由命名 Route::get(‘自定义名称/:参数名’,‘模块名/控制器名/方法名’)。。 并非是命名空间;如果控制器在某一文件下则为 ‘模块...validate两种用法: 独立验证 验证器 合理安排层级关系 一般设计模式为: 1....
  • struts提供可以让用户自定义的方法,而其中各个自定义方法对应的验证方法也是有所差异...2.当一个程序中存在自定义的输入校验validateMyExecute方法,又存在validate方法时候,是会优先执行validateMyExecute,然后再执
  • 可以看出当没有export的时候,checKData 是私有的无法被外部访问(我们会想到闭包,return一个方法出来调用内部方法),在ts中加入export 后StringValidate就会暴露给外部变量Model1,也是闭包。 使用方式很简单: ...
  • 代码如下:注意,我的模块名为api,所以命名空间如下 保护属性$rule为官方规定,不能改变,其实验证规则require都是封装好的函数名,所以我们也建立一个方法方法名填写在验证规则后面即可 namespace app\api\...
  • 转:Struts 2 验证方法

    2010-11-22 09:14:00
    Struts2输入校验Struts2提供了客户端校验与服务端校验。这里只是做个简易的总结。1.)服务端校验:当程序流程进入到Action类,并经历了struts2的类型转换阶段...1.1)编码校验:在Action类里重写父类的validate()方法即可。
  • 这一版能够支持对效果的更灵活定制,而且借助新增的命名空间事件,也使插件开发变得更容易。 jQuery UI(2007年9月):这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQuery UI中包含...
  • SoapParameterStyle paramStyle, String elementName, String elementNamespace, Boolean nsIsDefault, XmlReflectionMember[] members, Boolean validate, Boolean openModel, String key, Boolean writeAccess) ...
  • TinkPHP5自定义验证类

    2020-09-07 11:36:07
    本文主要介绍thinkPHP5框架自定义验证器实现方法,结合实例形式分析了thinkPHP自定义验证器的具体定义与使用方法, 首先我们在要使用验证类的模块目录下建立validata文件夹,我这里在后台的admin模块下建立的,然后...
  • 命名规范为校验名+Validator,该类必须继承FieldValidatorSupport,覆盖validate方法package cn.jieou.struts.validate;import com.opensymphony.xwork2.validator.ValidationException; import ...
  • 如果您使用其他IDE,请找到一种以类似方式进行设置的方法。 项目安装 后端 创建.env.example文件的副本,并将其命名为.env 。 如有必要,使用本地设置更新.env文件中的值。 打开pgAdmin页面,使用您的密码连接到该...
  • struts2学习笔记3

    2018-05-08 21:26:27
    验证Action的指定方法,只需将重写的validate方法名改为“validate+要验证的方法名”即可!注意方法名的首字母都得大写。基于配置文件的表单的验证,可以减少java代码的编写,如果要验证的Action是“LoginAction”,...
  • Struts服务器验证

    2013-12-16 21:45:31
    2. 也可以不重写直接写方法 命名规则为 validate验证的方法名称也可以实现验证   3.保存错误信息 fielderror 在验证是自动显示错误信息,action1error ,actionmessage 不强制返回只是提示 4.可以implements ...
  • S6.4_Struts2_Validation

    2016-12-15 22:55:28
    3. 在动作类里添加validateAdd()方法,只验证action中的add方法(注意validateAdd命名规则validate是固定不变的 首字母大写的Add对应添加方法add)
  • 九、数据验证机制

    2011-05-18 16:23:00
    一、手动验证的实现 ActionSupport类对Validateable接口进行了实现,但对validate()方法空实现。 使用validate()方法可以用户请求的多个Action进行验证,但其验证的逻辑是相同。如果在一个Action类...
  • 验证器使用方式

    2019-04-28 10:48:02
    创建一个validate目录下的class.php文件,命名为manager 在managerService类里使用命名空间 use app\admin\validate\Manager as ManagerValidate; 在某个方法里创建一个验证器对象 $validate=new ManagerValidate()...
  • Struts2数据校验

    2019-11-07 10:40:24
    1.在指定action(必须继承ActionSupport)中添加验证方法命名规则:validate+验证的方法名 2.在Struts.xml中的action中配置验证返回界面 3.前台jsp页面显示验证提示 方法二:配置文件验证 1.新建数据...
  • 验证框架

    2011-03-22 21:21:41
    重写validate方法,页面中使用了ww:form标签,已经提供了输出校验错误和显示错误的能力了。 使用配置文件方式,命名方式ActionName-validation.xml其中actionname就是action的类字(注意是类名不是action名字)。和...
  • struts2输入校验小结

    2013-04-08 19:43:00
    2、执行校验框架转换3、执行特定方法对应的validate验证(test,validateTest)4、执行validate()方法 如果以上所有过程出现了任何错误,都不会继续执行,页面将转向struts.xml中input这个result对应的页面。 ...
  • Page.IsValid 属性

    千次阅读 2008-04-11 02:06:00
    获取一个值,该值指示页验证是否成功。 命名空间:System.Web.UI程序集:System.Web(在 system.web.dll 中)属性值如果页验证成功,则为 true;...只有在已调用 Page.Validate 方法,或已在开始窗体处理的 ASP.NET
  • 表单提交数据的验证 1.验证方式分为硬编码和软编码 ... 硬编码方式一: 重写ActionSupport类中的validate()方法 // 这种方式会拦截该Action类中的所有方法 可以使用注解跳过拦截 @Override publ...
  • struts2输入校验

    2011-05-30 22:51:00
    2、执行校验框架转换 3、执行特定方法对应的validate验证(test,validateTest) 4、执行validate()方法 如果以上所有过程出现了任何错误,都不会继续执行,页面将转向struts.xml中input这个...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

validate方法命名