您的位置:首页 > 其它

基于Ajax的输入校验

2008-11-02 12:53 393 查看
Ajax的输入校验不是客户端校验,而是服务器端校验,但这种服务器端校验是以异步方式进行的,浏览者无需显示提交请求,系统自动完成校验。
  Struts2的Ajax校验建立在DWR和Dojo两个框架之上,其中DWR负责实现在JavaScript中调用远程方法,而Dojo则负责
页面效果的实现。
  DWR是Java领域的Ajax框架,它允许客户端JavaScript代码直接调用服务器端的Java方法,这个过程是通过一个核心Servlet的转换来实现的。为了让DWR的核心Servlet起作用,必须在web.xml文件中配置该核心Servlet。
如下:
Java代码

<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>

<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的核心Servlet后,该Servlet负责将服务器端的Java方法暴露出来。具体哪些方法需要被暴露出来,可以通过在dwr.xml文件中指定。(dwr.xml文件应放在WEB-INF路径下)
Java代码

dwr.xml文件:

<!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>

dwr.xml文件:
<!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>

为了使用Ajax表单,必须使用<s:head theme="ajax" />标签来导入Ajax头。
Java代码

regist.jsp文件:

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>regist</title>

<s:head theme="ajax" />

</head>

<body>

<H1>请输入您的注册信息</H1>

<s:form action="regist" theme="ajax" validate="true" >

<s:textfield name="name" label="姓名" />

<s:textfield name="pass" label="密码" />

<s:textfield name="age" label="年龄" />

<s:textfield name="birth" label="生日" />

<s:submit value="注册" targets="show"/>

</s:form>

<div id="show"></div>

</body>

</html>

regist.jsp文件:
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>regist</title>
<s:head theme="ajax" />
</head>
<body>
<H1>请输入您的注册信息</H1>
<s:form action="regist" theme="ajax" validate="true" >
<s:textfield name="name" label="姓名" />
<s:textfield name="pass" label="密码" />
<s:textfield name="age" label="年龄" />
<s:textfield name="birth" label="生日" />
<s:submit value="注册" targets="show"/>
</s:form>
<div id="show"></div>
</body>
</html>

Java代码

RegistAction.java文件

package com.pracbiz.struts2AjaxDemo.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegistAction extends ActionSupport {

private static final long serialVersionUID = -802101249451189323L;

private String name;

private String pass;

private int age;

private Date birth;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPass() {

return pass;

}

public void setPass(String pass) {

this.pass = pass;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Date getBirth() {

return birth;

}

public void setBirth(Date birth) {

this.birth = birth;

}

}

RegistAction.java文件
package com.pracbiz.struts2AjaxDemo.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegistAction extends ActionSupport {
private static final long serialVersionUID = -802101249451189323L;
private String name;
private String pass;
private int age;
private Date birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}

尽理不要重写action类的validate方法
Java代码

RegistAction-validation.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">

<validators>

<!-- Field-Validator Syntax -->

<field name="name">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>必须输入名字.</message>

</field-validator>

</field>

<field name="pass">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>必须输入密码.</message>

</field-validator>

</field>

<field name="age">

<field-validator type="int">

<param name="min">1</param>

<param name="max">120</param>

<message>年龄必须在${min}到${max}之间.</message>

</field-validator>

</field>

<field name="birth">

<field-validator type="required">

<message>必须输入生日.</message>

</field-validator>

<field-validator type="date">

<param name="min">1900-01-01</param>

<param name="max">2050-02-21</param>

<message>生日必须在${min}到${max}之间.</message>

</field-validator>

</field>

</validators>

RegistAction-validation.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<!-- Field-Validator Syntax -->
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入名字.</message>
</field-validator>
</field>
<field name="pass">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入密码.</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">120</param>
<message>年龄必须在${min}到${max}之间.</message>
</field-validator>
</field>
<field name="birth">
<field-validator type="required">
<message>必须输入生日.</message>
</field-validator>
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message>生日必须在${min}到${max}之间.</message>
</field-validator>
</field>
</validators>

Java代码

struts.xml文件

<?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>

<constant name="struts.i18n.encoding" value="UTF-8" />

<package name="com" extends="struts-default">

<action name="regist" class="com.pracbiz.struts2AjaxDemo.action.RegistAction">

<result>/welcome.jsp</result>

</action>

</package>

</struts>

struts.xml文件
<?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>
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="com" extends="struts-default">
<action name="regist" class="com.pracbiz.struts2AjaxDemo.action.RegistAction">
<result>/welcome.jsp</result>
</action>
</package>
</struts>

Java代码

welcome.jsp文件

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head>

<title>My JSP 'welcome.jsp' starting page</title>

</head>

<body>

here is your information:<br>

<s:property value="name" /><br>

<s:property value="pass" /><br>

<s:property value="age" /><br>

<s:property value="birth" />

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: