struts动态form表单验证
struts表单验证有两种。一种通过ActionFrom中的validate方法进行验证,这中验证是在后台java代码中进行验证。另一种是通过DynaValidatorForm进行验证,这种验证比较麻烦,属于struts高级特性。我们在这里主要介绍第二种方法。
我们从页面到后台的编程步骤讲起。首先是页面。页面上一定要注意:要导入标签库html,并且要用到<html:errors/>属性,因为我们的验证出错信息显示是通过该标签的。具体代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>迅腾国际滨州校区</title>
</head>
<body>
<html:errors/>
<form action="login.do?method=login" method="post">
<input type="text" name="name" ><br>
<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
配置好页面,我们去看strtus-config.xml文件,首先我们创建一个动态验证form,如下:
<form-beans >
<form-bean name="loginForm" dynamic="true" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="name" type="java.lang.String"></form-property>
<form-property name="password" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
其中,loginForm是指表单的名字,需要和下面action中name的值一样。dynamic="true" 是表明这里用的是动态ActionForm.类型必须是org.apache.struts.validator.DynaValidatorForm。name和password必须和页面表单中的控件名称一致。
然后是action配置。如下:
<action
attribute="loginForm"
input="/index.jsp"
name="loginForm"
parameter="method"
path="/login"
validate="true"
scope="request"
type="com.xt.struts.action.LoginAction">
<forward name="index" path="/index.jsp" />
</action>
这里必须设置validate验证为true。
需要加入插件。虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
注意,在struts-config文件中所有的标签都是有顺序的,<plug-in />标签需要放在最下面,也就是
<message-resources parameter="com.xt.struts.ApplicationResources" />的下面。
再注意到这两个文件。validator-rules.xml是系统提供给我们的,我们不用关心。但validation.xml是自己写的。这些都有一定的格式。我写的例子如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation
PUBLIC "-//Apache Software Foundation//
DTD Commons Validator Rules
Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset>
<form name="loginForm">
<field property="name"
depends="required">
<arg0 key="prompt.name"/>
</field>
<field property="password"
depends="required">
<arg0 key="prompt.password"/>
</field>
</form>
</formset>
</form-validation>
Validator使用该表单标记的name属性的值将验证定义与要应用这些定义的Form Bean的名称相匹配
下面我们看一下ApplicationResource.properties文件。每个消息的键值对应于每个由validator-rules.xml文件中的验证例行程序所指定的消息,它们由Struts示例应用程序提供。
# Error messages for Validator framework validations
prompt.name=name
prompt.password=password
errors.required={0} is required.
errors.minlength={0} cannot be less than {1} characters.
errors.maxlength={0} cannot be greater than {2} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.0. errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
请注意,每条消息都有占位符,形式为{0}、{1}或{2}。在运行期间,占位符被另一个值代替,如所验证的域的名称。这一特性特别有用,它使你能够创建可被几个不同的域重复使用的通用验证错误消息。
prompt.name 和 validation.xml中的 <arg0 key="prompt.password"/>一致。
这样一个简单的验证就通过了。