struts2标签和表单验证

感谢博主  谢谢  再次感谢

 
<s:textfield name="user.username" label="用户名"/>

这个name与你action中的javabean联系起来,会自己收集值(前提是你在action 中引入了user有get/set方法 ,且user实现 了javabean特点类)

而labe是用来显示这个框是用来干吗的,效果如图 :

代码是:


如果要实现表单验证:




在struts.xml中对应的action中result必须有一个是input返回的字符串



如果只想显示某个错误!




<-------------------------------------------------------------------------------------第二种:用配置文件的方式来实现------------------------------------------------------------------------------------------------->


配置文件 里的内容为:



效果如图:


action还是必须继承actionsupport



<------------------------------------------------------------------------------------动作校验------------------------------------------------------------------------------------------------->

需求是这样的:当你填年龄的时候,你必须填的比你账户的数值大:




AddUserAction-validation.xml文件中的源码是:

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

<validators>
	<field name="user.username">
		<field-validator type="requiredstring">
			<message>请输入用户名</message>
		</field-validator>
	</field>
	<field name="user.password">
		<field-validator type="requiredstring">
			<message>请输入密码</message>
		</field-validator>
	</field>
	<field name="user.password">
		<field-validator type="requiredstring">
			<message>请输入密码</message>
		</field-validator>
	</field>
	<validator type="expression"><param name="expression"><![CDATA[user.age>=user.account]]></param>
		<message>年龄必须在${user.account}岁以上,你输入的是${user.age}</message>
	</validator>
</validators>

需要在input对应的页面中加入<s:actionerror/>


在xwork-core-2.3.16.jar包下的com.opensymphony.xwork2.validator.包中可以找到default.xml,里面有些我们需要的信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->

换成相应的type值就可以对相应的要求进行校验

<-------------------------------------------------------------------------------------自己实现自定义的校验类------------------------------------------------------------------------------------------------->

我们要实现校验一个文本框中,不能有中文,有中文,没有一个中文来。这是需求

中文一个字符有2个字节,一个英文数字等其它占一个字节,所以根据这个来判断

package buaa.util;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class ChineseValidator extends FieldValidatorSupport {
	/**
	 * 表示是否包含有中文,现有3种模式: none 没有中文字符 some 含有中文字符,默认值 all 全是中文字符
	 */
	private String mode = "all";

	

	private void setMode(String mode) {
		this.mode = mode;
	}

	public void validate(Object object) throws ValidationException {
		// 获取字段名
		final String fieldName = this.getFieldName();
		// 获取字段值
		final String fieldValue = (String) this
				.getFieldValue(fieldName, object);
		// 字节数
		final int bytes = fieldValue.getBytes().length;
		// 字符数
		final int chars = fieldValue.length();
		System.out.println("现在的状态是:"+mode);
		if (mode.equals("none")) {
			
			// 现在要求全不是中文字符
			// 所以字节数和字符数据,两个数字必须相等
			if (chars != bytes) {
				this.addFieldError(fieldName, object);
			}
		} else if (mode.equals("some")) {
		
			// 现在要求含有中文字符
			/**
			 * 所以字节数据 与字符数据 必做不相等,相等则出错 另外,如果字节数据 是字符数据 的两倍,表示全是中文字符,也出错
			 */
			if (chars == bytes || chars * 2 == bytes) {
				this.addFieldError(fieldName, object);
			}
		} else if (mode.equals("all")) {
			/** 现在要求全是中文字符所以字节数 是字符数的两倍,否则出错 */
			if (chars * 2 != bytes) {
				this.addFieldError(fieldName, object);
			}
		}
	}

}

上面这个类继承了 FieldValidatorSupport且实现了它的抽象方法 validate(Object object) 。

添加一个validators.xml文件

位置:


内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

	<!-- START SNIPPET: validators-default -->
<validators>
	<!--自定义的-->
	<validator name="chinese" class="buaa.util.ChineseValidator" />
	<!--默认的    -->
	<validator name="required"
		class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
	<validator name="requiredstring"
		class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
	<validator name="int"
		class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
	<validator name="long"
		class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator" />
	<validator name="short"
		class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator" />
	<validator name="double"
		class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
	<validator name="date"
		class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
	<validator name="expression"
		class="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
	<validator name="fieldexpression"
		class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
	<validator name="email"
		class="com.opensymphony.xwork2.validator.validators.EmailValidator" />
	<validator name="url"
		class="com.opensymphony.xwork2.validator.validators.URLValidator" />
	<validator name="visitor"
		class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
	<validator name="conversion"
		class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
	<validator name="stringlength"
		class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
	<validator name="regex"
		class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
	<validator name="conditionalvisitor"
		class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator" />
</validators>




校验文件AddUserAction-validation.xml的内容为

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

<validators>
	<field name="user.username">
		<field-validator type="chinese">
			<param name="mode"></param>
			<message>用户名,全为中文</message>
		</field-validator>
	</field>
	<field name="user.password">
		<field-validator type="requiredstring">
			<message>请输入密码</message>
		</field-validator>
	</field>
	<field name="user.password">
		<field-validator type="requiredstring">
			<message>输入密码不一致</message>
		</field-validator>
	</field>
	<validator type="expression"><param name="expression"><![CDATA[user.age>=user.account]]></param>
		<message>年龄必须在${user.account}岁以上,你输入的是${user.age}</message>
	</validator>
</validators>


效果为:


实践的时候出了点状况,还没有分析出来原因:




总结:让页面显示校验不通过,提示出来的信息,二种方式:

1、对于字段验证错误来说,在<s:form>使用xhtml风格的时候(默认是这种风格),<s;textfield/>标签会将这个字段的错误信息显示在这个文本框的上边。

2、还可用<s:fielderror/>标签来将字段验证错误信息显示在指定位置,如果不指定其fieldName属性则会显示所有的错误,如果指定了fieldName属性则会显示指定字段的错误.

注意:对于动作验证错误,可以使用<s:actionerror/>标签,它会把所有的动作验证错误显示在指定的位置。


验证器短路:

大概意思就是一个文本框中有需要验证,默认是即使第一验证不通过,也继续验证,但如果设置了某个属性,一旦第一个没有通过,后面的就不执行了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值