基於struts2和DWR的Ajax輸入校驗

        Struts 2框架在使用客戶端校驗時候,由於需要轉換爲JavaScript腳本,所以並不是所有服務器端校驗規則均能轉換爲客戶端校驗,而AJAX校驗則可以使用所有服務器端校驗規則。

        AJAX是一種新興技術,主要特點是可以異步處理用戶請求,例如,用戶在填寫一個表單時候,當填寫完一個文本框後,該文本框失去焦點同時,會異步地完成同服務器交互,提示校驗信息,而不是所有表單填寫完後單擊“提交”按鈕時顯示校驗信息。

        在這裏筆者簡單演示一個示例,讓讀者體驗AJAX特點。

        注意:目前dwr的最新版本是3.0,但是struts2的2.1.8版本不支持最新版本,因此值能使用dwr的2.0或者以下版本,我使用的是dwr1.1.3版本,相對比較穩定。

       1、新建一個web項目dwrDemo,爲了讓dwr的核心servlet起作用,必須在web.xml文件中配置核心servlet。配置後的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">
	<!--配置歡迎界面-->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<!--配置Struts 2的核心filter-->
	<filter>
		<filter-name>struts</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class><!--配置Struts 2的核心實現類-->		<init-param>
			<param-name>actionPackages</param-name>
			<param-value>org.apache.struts2.showcase.person</param-value>
		</init-param>
	</filter>
	<filter-mapping><!--攔截所有的URL請求-->
		<filter-name>struts</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 配置dwr的核心Servlet -->
	<servlet>
		<servlet-name>dwr</servlet-name>
		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class><!-- 指定Servlet的實現類 -->
		<init-param><!-- 指定處於開發階段 -->
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	<servlet-mapping><!-- 指定DWR的核心Servlet攔截的URL -->
		<servlet-name>dwr</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
</web-app>



        2、在上面的web.xml文件中添加了dwr的核心servlet後,該servlet將負責暴露服務器端的java方法,通過dwr.xml配置文件制定需要暴露的java方法,在該項目的WEB-INF目錄下新建一個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 -->


        3、在src目錄下新建一個com.gdupt.action包,在該包下再新建一個RegisterAction類,用於處理用戶的註冊請求,代碼如下:

package com.gdupt.action;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
 
	private String username;
	private String password;
	private int age;
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String execute(){
		return SUCCESS;
	}
}


        4、在src目錄下新建一個struts.xml文件,該文件中添加RegisterAction類的配置,代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="default" extends="struts-default">        
        <action name="userregister" class="com.gdupt.action.RegisterAction">
        	<result name="input">/register.jsp</result>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>


        5、在RegisterAction所在的目錄下新建一個RegisterAction-validation.xml文件,在該文件中設置校驗規則,來完成輸入校驗,本輸入校驗使用字段校驗器來配置校驗規則。配置代碼如下:

<!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="username">
		<field-validator type="requiredstring">
			<message>用戶名是必填內容!</message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="requiredstring">
			<message>密碼是必填的內容!!</message>
		</field-validator>
	</field><field name="age">
		<field-validator type="int">
			<param name="min">1</param>
			<param name="max">130</param>
			<message>年齡必須在${min}到${max}之間!</message>
		</field-validator>
	</field>	
</validators>


        6、在WebContent下新建一個register.jsp頁面,爲了實現ajax校驗,需要將表單設置成ajax主題,並且設置validate="true"。當某個輸入組建失去焦點時,系統會負責將輸入的內容發送到服務器端進行校驗。該頁面的代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>歡迎註冊</title>
</head>
<body>
<s:form method="post" action="userregister" validate="true" theme="ajax">
	<s:textfield label="用戶名" name="username" />			
	<s:password label="密碼" name="password"></s:password>
	<s:textfield label="年齡" name="age"></s:textfield>
	<s:submit value="註冊" />
</s:form>	
</body>
</html>


        7、在WebContent下新建一個success.jsp頁面,當用戶註冊成功後跳轉到success.jsp頁面,代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>註冊成功</title>
  </head>  
  <body>
    恭喜您,註冊成功! <br>
  </body>
</html>


    8、打開瀏覽器,在地址欄中輸入:http://localhost:8080/dwrDemo/register.jsp,進入註冊頁面,輸入不合法的信息,單擊註冊按鈕提交表單,經校驗後會在輸入框的上方給出相應的提示信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章