建立一个简单的业务控制器实现类,如代码7.21所示。
代码7.21 AJAX校验示例的业务控制器
package ch7;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class Reg_ajax_Action extends ActionSupport {
private String name;
private int age;
private Date birthday;
//属性的getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
该Action非常简单,只是定义了3个相应的属性。在配置文件中加入如下内容:
<action name="Reg_ajax_Action" class="ch7.Reg_ajax_Action">
<result name="input">/ch7/reg-ajax.jsp</result>
</action>
建立一个Reg_ajax_Action-validation.xml校验规则文件,如代码7.22所示。
代码7.22 AJAX校验示例的校验规则文件
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<!--
Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">13</param>
<param name="max">19</param>
<message>年龄必须在13至19岁之间</message>
</field-validator>
</field>
<field name="birthday">
<!--定义类型为date-->
<field-validator type="date">
<!--校验生日有效时间段-->
<param name="min">1990-01-01</param>
<param name="max">2006-01-01</param>
<message>生日必须在${min}至${max}之间</message>
</field-validator>
</field>
</validators>
★ 说明 ★
该校验规则文件也是一个标准的校验规则文件。
建立一个reg-ajax.jsp视图文件,如代码7.23所示。
代码7.23 AJAX校验示例的JSP视图
<%@ page c language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!-- START SNIPPET: ajaxValidation -->
<html>
<head>
<title>Validation - Basic</title>
<s:head theme="ajax"/>
</head>
<body>
<s:form method="post" validate="true" theme="ajax">
<s:textfield label="用户名" name="name"/>
<s:textfield label="年龄" name="age"/>
<s:textfield label="生日" name="birthday"/>
<s:submit/>
</s:form>
</body>
</html>
<!-- END SNIPPET: ajaxValidation -->
该文件同以往JSP视图文件不同的是,在<s:form/>标签中加入了theme="ajax"属性定义。
在浏览器中输入http://localhost:8080/bookcode/ch7/Reg_ajax_Action!input.action,在运行界面年龄一栏中输入“0”,当光标焦点离开该文本框时,会立刻显示校验异常信息,而不需要单击“submit”按钮后才显示校验异常信息。可见,AJAX使用了异步的方式同服务器端进行交互,并在某个元素失去焦点时触发。其运行界面如图7.11所示。
AJAX技术给用户带来了更加友好的体验,请读者参考本书中后面详细的介绍。
★ 注意 ★
运行本示例时,需要在地址栏输入http://localhost:8080/bookcode/ch7/Reg_ajax_ Action!input.action,而不是http://localhost:8080/bookcode/ch7/test.jsp。
图7.11 AJAX校验界面