java ajax struts2,struts2提供Ajax支持

DWR校验

Ajax的输入校验不是客户端校验,而是服务器端校验,但这种服务器端校验是以异步方式进行的,浏览者无需显示提交请求,当浏览者输入完成后,系统自动完成校验。Struts2的Ajax校验建立在DWR和Dojo两个框架之上,其中DWR负责实现在JavaScript中调用远程Java方法,而Dojo则负责实现页面效果的实现。

一. 配置DWR的核心Servlet

DWR是Java领域的Ajax框架,它允许客户端JavaScript代码直接调用服务器端的Java方法,而这个过程是通过一个核心Servlet的转换来实现的。为了让DWR的核心

Servlet起作用,必须在web.xml文件中配置该核心Servlet。

配置DWR的核心Servlet的配置片段如下:

dwr

uk.ltd.getahead.dwr.DWRServlet

debug

true

dwr

/dwr/*

在上面配置文件中增加了DWR的核心Servlet后,该Servlet负责将服务器端的Java方法暴露出来。到底那些Java方法需要被暴露出来,通过在dwr.xml配置文件中指定即可,因此需要在本应用中增加一个dwr.xml文件。

提示:此处并不许需要开发者自己开发Ajax应用,并不需要开发者利用DWR框架,我们只需利用Struts2对DWR的封装即可。因此,只需在Web应用的WEB-INF路径下增加dwr.xml文件即可,而且dwr.xml文件的代码也是固的:

/p>

"-//GetAhead

Limited//DTD Direct Web Remoting 1.0//EN"

"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

javascript="validator">

value="org.apache.struts2.validators.DWRValidator"/>

match="com.opensymphony.xwork2.ValidationAwareSupport"/>

import

java.util.Map;

import

org.apache.struts2.validators.DWRValidator;

DWRValidator.doPost(String, String,

Map);

]]>

在上面配置文件中,将org.apache.struts2.validators.DWRValidator

类创建成一个JavaScript对象,这个对象名为validator。当然,这里所说的创建是假创建,因为Java类是无法创建JavaScript

对象,但DWR提供一种方式,允许当我们在客户端调用validator的方法时,转换成调用DWRValidator实例的方法。

提示:关于DWR的运行原理和使用细节,请读者参考笔者所著的《基于J2EE的Ajax宝典》一书。此处由于篇幅管理,无法详述DWR的用法和细节。

实际上,对于一个Struts2的开发者而言,无需理会这些实现细节,因为Struts2已经为我们提供了这些封装,我们只需要在Struts2封装的基础上进行开发即可。值得指出的是,为了让Web应用增加DWR支持,显然还需要将DWR的二进制包复制到Web应用中。即使对于Struts2.0.6正式版,依然不支持DWR的的最新版本(DWR的最新版本是2.0.1),因此只能使用DWR的前一个正式版1.1.3,将dwr-1.1.3.jar文件复制到Web应用中即可。

提示:由于Struts2发行版中并未包含DWR二进制文件。因此,dwr-1.1.3.jar文件必须到DWR的官方站点

(http://getahead.ltd.uk/dwr/)自行下载。

二.

设置页面的Ajax主题

正如前面已经提到的,实现Ajax交互必须在页面中导入Ajax风格的controlheader.ftl,这个控件负责当每个输入组件失去焦点时,将输入结果发送到服务器端进行校验。

为了实现Ajax校验,还需要将表单设置成Ajax主题,并且设置validate="true"。下面是本示例应用中regist.jsp页面的代码:

contentType="text/html; charset=GBK"%>

< prefix="s"

uri="/struts-tags"%>

请输入您的注册信息

theme="ajax"/>

请输入您的注册信息

validate="true">

label="作者名"/>

label="密码"/>

label="年龄"/>

label="生日"/>

value="注册"/>

在上面的表单被设置成Ajax主题(这将意味着该表单是一个远程表单),并且设置了validate="true"属性。一旦完成了上面设置后,当某个输入组件失去焦点时,系统会负责将输入内容发送到服务器端进行校验。

三.

设置校验规则

对于使用Ajax校验的Action类,与基本校验的Action类并没有太大的不同之处。但必须指出:尽量不要重写Action类的validate方法,重写该方法来完成Ajax校验可能出现一些未知异常(这可能是Struts2还需要完善的地方)。

注意:不同通过重写validate方法来完成Ajax校验。

为了完成输入校验,我们通过定义自己的校验规则文件来完成输入校验,本输入校验文件使用字段校验器风格来配置校验规则。下面是校验文件的代码:

文件,该文件指定了Action的属性必须满足怎样的规则,下面是该应用中Action的校验文件的代码。

encoding="GBK"?>

/p>

"-//OpenSymphony Group//XWork Validator 1.0.2//EN"

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

name="name">

type="requiredstring">

name="trim">true

必须输入名字

type="regex">

name="expression">

您输入的用户名只能是字母和数组,且长度必须在4到25之间

name="pass">

type="requiredstring">

name="trim">true

必须输入密码

type="regex">

name="expression">

您输入的密码只能是字母和数组,且长度必须在4到25之间

name="age">

type="int">

name="min">1

name="max">150

年纪必须在1到150之间

name="birth">

type="date">

name="min">1900-01-01

name="max">2050-02-21

年纪必须在${min}到${max}之间

实际上,这份校验文件与之前进行基本校验的校验文件并没有太大的区别。这也证明了Struts2框架的简单、易用。完成上面定义后,如果浏览者在输入页面中输入用户名,将焦点移到密码输入框时,将看到Ajax校验效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值