struts2 之 输入校验

struts2 提供了服务器端和客户端输入验证 

1. 通过重写validate()方法:

当验证不通过时 Action返回名为input的逻辑视图,并可通过<s:fielderror /> 在该视图中输出错误 信息,注意action应该继承ActionSupport。通过ActionSupport中的addFieldError("字段名","错误信息")将错误信息添加到相应字段,如果有struts的表单标签,则相应的字段处会提示错误信息,validate会对action中的所有方法进行数据验证。

index.jsp

<body>


	<s:fielderror></s:fielderror>
	<!-- 显示出错信息 -->


	<s:fielderror fieldName="name" theme="simple" />
	<!-- 带样式-->
	<br />
	<s:property value="errors.name[0]" />
	<!--  不带样式-->
	<s:debug></s:debug>
	<!-- 值栈- ->
       
    <form action="${pageContext.request.contextPath}/person/manage_save" method="post"> 
	              姓名:<input name="username" type="text"/><br> 
	              手机:<input name="mobile" type="text"/><br> 
	    <input type="submit" value="提交"/> 
    </form> 
    </body>

效果图:


struts.xml:

<action name="manage_*" class="cn.ljf.PersonAction" method="{1}">
		<result name="message">/message.jsp</result>	
		<result name="input">/index.jsp</result>	<!--name名 必须是input -->	
</action>
action:

public class PersonAction extends ActionSupport{
	@Override
	public void validate() {
		if(this.username==null||"".equals(username.trim()))
			this.addFieldError("username", "用户名不能为空!");
		if(this.mobile==null||"".equals(mobile.trim()))
			this.addFieldError("mobile", "手机号不能为空!");
		else 
		{
			if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches())
				this.addFieldError("mobile", "手机号格式不正确!");
		}
	}
	private String username;
	private String mobile;
	//getter setter
}
若要对指定的方法验证则需写一个方法validateXxx方法,其中xxx为要执行的方法名.
如validateUpdate()
 如果中间数据转换失败(不论是基础类型,还是自定义类型)的话,也会往fielderror添加信息,同时若有struts2的表单的话,表单的相应字段也会出现提示信息。我们也可以更改默认的类型转换的信息。例如对int数据输入字母




第二种:通过xml配置

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空!</message><!-- 出错信息 -->
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="requiredstring">
            <message>手机号不能为空</message>
        </field-validator>
        <field-validator type="regex">
        	<param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
        	<message>手机格式不正确</message>
        </field-validator>
    </field>
</validators>



增加客户端校验非常简单,将输入页面的表单元素改为使用struts2标签来生成表单,并且为该表单增加validate="true"属性即可

<head>    
  	<s:head/>
    <title>title</title>
  </head>
  <body>
  <s:form action="reg" validate="true">
  <s:textfield label="用户名" name="name"/>
  </s:form>
  </body>




以下为一个配置实例|(注意其中的短路校验short-circuit设置)
<!-- 校验文件的根元素 -->  
<validators>  
    <!-- 校验Action的name属性 -->  
    <field name="name">  
        <!-- 指定name属性必须满足必填规则 -->  
        <field-validator type="requiredstring" short-circuit="true">  
            <param name="trim">true</param>  
            <!-- 如果校验失败,输出name.requried对应的国际化信息 -->  
            <message>${getText("name.requried")}</message>  
        </field-validator>  
        <!-- 指定name属性必须匹配正则表达式 -->  
        <field-validator type="regex">  
            <param name="expression"><![CDATA[(\w{4,25})]]></param>  
            <!-- 如果校验失败,输出name.regex对应的国际化信息 -->  
            <message>${getText("name.regex")}</message>  
        </field-validator>  
    </field>  
    <!-- 校验Action的pass属性 -->  
    <field name="pass">  
        <!-- 指定pass属性必须满足必填规则 -->  
        <field-validator type="requiredstring" short-circuit="true">  
            <param name="trim">true</param>  
            <!-- 如果校验失败,输出pass.requried对应的国际化信息 -->  
            <message>${getText("pass.requried")}</message>  
        </field-validator>  
        <!-- 指定pass属性必须满足匹配指定的正则表达式 -->  
        <field-validator type="regex">  
            <param name="expression"><![CDATA[(\w{4,25})]]></param>  
            <!-- 如果校验失败,输出pass.regex对应的国际化信息 -->  
            <message>${getText("pass.regex")}</message>  
        </field-validator>  
    </field>  
    <!-- 指定age属性必须在指定范围内-->  
    <field name="age">  
        <field-validator type="int">  
            <param name="min">1</param>  
            <param name="max">150</param>  
            <!-- 如果校验失败,输出age.range对应的国际化信息 -->  
            <message>${getText("age.range")}</message>  
        </field-validator>  
    </field>  
    <!-- 指定birth属性必须在指定范围内-->  
    <field name="birth">  
        <field-validator type="date">  
            <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->  
            <param name="min">1900-01-01</param>  
            <param name="max">2050-02-21</param>  
            <!-- 如果校验失败,输出birth.range对应的国际化信息 -->  
            <message>${getText("birth.range")}</message>  
        </field-validator>  
    </field>  
</validators>  


内建校验器:



基于Annotation 也可以校验


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值