1.配置dwr.xml,固定写法:
<?xml version="1.0" encoding="UTF-8"?> <!-- START SNIPPET: dwr --> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> <dwr> <allow> <create creator="new" javascript="validator"> <param name="class" value="org.apache.struts2.validators.DWRValidator"/> </create> <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/> </allow> <signatures> <![CDATA[ import java.util.Map; import org.apache.struts2.validators.DWRValidator; DWRValidator.doPost(String, String, Map<String, String>); ]]> </signatures> </dwr> <!-- END SNIPPET: dwr -->
org.apache.struts2.validators.DWRValidator在 struts2-dwr-plugin-2.1.6.jar中,需要导入。
2.web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Struts 2 AJAX Part 3</display-name> <filter> <filter-name>struts-cleanup</filter-name> <filter-class> org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 开始DWR配置 --> <servlet> <servlet-name>dwr</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!-- 结束DWR配置 --> <welcome-file-list> <welcome-file>AjaxValidation.jsp</welcome-file> </welcome-file-list> </web-app>
注意包名,DWR在与spring整合时用的servlet-class是org.directwebremoting.spring.DwrSpringServlet。
通过以上配置,我们可以将DWRValidator中的方法暴露为Javascript可以调用的远程接口。
在正确完成以上步骤之后,我们发布运行一下应用程序,在浏览器地址栏中输入http://localhost:8080/struts2_DWR2_form_validate/dwr/访问dwr
4.Action类AjaxValidation:
package com.wyx.struts2formtest; import com.opensymphony.xwork2.ActionSupport; public class AjaxValidation extends ActionSupport{ private static final long serialVersionUID = -7901311649275887920L; private String name; private String password; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() { return SUCCESS; } }
5.编写表单校验的配置代码,名字为AjaxValidation-validation.xml,放在与action同级目录下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <validator type="regex"> <param name="fieldName">password</param> <param name="expression"> <![CDATA[(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$]]> </param> <message>Password must be between 8 and 10 characters, contain at least one digit and one alphabetic character, and must not contain special characters</message> </validator> <field name="name"> <field-validator type="requiredstring"> <message>You must enter a name</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">127</param> <message>Age must be between 18 and 127</message> </field-validator> </field> </validators>
6.jsp页面 AjaxValidation.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Struts 2 AJAX - Validation</title> <s:head theme="ajax" /> </head> <body> <h2> AJAX Validation Using DWR </h2> <s:form method="post" validate="true" theme="ajax"> <s:textfield label="Name" name="name" /> <s:password label="Password" name="password" /> <s:textfield label="Age" name="age" /> <s:submit /> </s:form> </body> </html>
注意事项:
(1)org.apache.jasper.JasperException: Template /template/ajax/head.ftl not found.
去掉 <s:head theme="ajax" />就不会报错,是因为它用到了struts2-dojo-plugin-2.1.x.jar包。
(2)dwr最好用1的版本。