Struts 2与AJAX(第三部分)(四)

42 篇文章 0 订阅
何时使用AJAX表单校验

虽然在Struts 2实现AJAX表单校验是一件非常简单的事,但我建议大家不要在所有的场合都使用这个功能,原因可以分为以下几个方面:

  1. AJAX校验在服务器上进行数据校验,可能会比较耗时;
  2. AJAX校验可能会过于频繁,加重服务器的负载;
  3. 一些普通的校验,只需要使用纯Javascript便可以实现。

读到这里,有的朋友可能会问:“那么什么时候才应该使用AJAX表单校验呢?”答案其实很简单,当我们的校验在页面加载时还不能够确定的情况下,就应该使用这个功能。例如,注册用户时,校验用户名是否已经存在;或者校验涉及过多的页务逻辑等。

现在让我们来改造一下上述例子,对于name我们可以使用AJAX校验,但对于其它的字段应该使用纯Javascript的校验。

在tutorial.AjaxValidation类加入如下方法:

     @Override
    public void validate()  {
         Set<String> users = new HashSet<String>();
         users.add("max");
         users.add("scott");
        if(users.contains(name))  {
             addFieldError("name", "The user name has been used!");
         }
     }清单7 src/tutorial/AjaxValidation.java代码片段

用于模拟用户注册的场境,当然在真实情况应该在数据库中检查用户是否存在。

接下来再修改JSP文件,将<s:form />里面的内容改为如下所示代码:

        <s:form method="post" validate="true" theme="ajax_xhtml">
            <s:textfield label="Name" name="name" theme="ajax" />
            <s:password label="Password" name="password" theme="xhtml" />
            <s:textfield label="Age" name="age" theme="xhtml" />
            <s:submit theme="xhtml" />
        </s:form>清单8 WebContent/AjaxValidation.jsp代码片段

对比早前的JSP代码,大家可以看出我将<s:form />的theme改成了“ajax_xhtml”,这个theme不是Struts 2自带,需要自定义。另外,除了Name使用了ajax的theme之外,其它的表单标签的theme都为xhtml,如此一来便可以实现只有当Name文本框失去焦点时才发生AJAX表单校验。

接下来,应该是我们的自定义ajax_xhtml的theme了。在源代码文件夹下新建包“template.ajax_xhtml”,然后在其中加入form.ftl和form-close.ftl文件,内容分别如下:

<#if parameters.validate?exists>
<script type="text/javascript" src="${base}/struts/validationClient.js"></script>
<script type="text/javascript" src="${base}/dwr/interface/validator.js"></script>
<script type="text/javascript" src="${base}/dwr/engine.js"></script>
<script type="text/javascript" src="${base}/struts/ajax/validation.js"></script>
</#if>
<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
<#include "/${parameters.templateDir}/simple/form.ftl" />
<#include "/${parameters.templateDir}/xhtml/control.ftl" />清单9 src/template/ajax_xhtml/form.ftl

上述的文件与xhtml theme中的form.ftl文件相似,我只是加入了AJAX表单校验所用的Javascript库,以便theme为ajax的表单标签使用。

<#include "/${parameters.templateDir}/xhtml/control-close.ftl" />
<#include "/${parameters.templateDir}/simple/form-close.ftl" />
<#include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" />清单10 src/template/ajax_xhtml/form-close.ftl

这个文件与xhtml theme中的form-close.ftl文件相同。

最后发布运行应用程序,大家可以发现在Password与Age的校验,只有在表单提交时才发生,而且是纯Javascript的校验。不过,以上代码还不是很完善,在行为上有些BUG。

总结

Struts 2相比一些其它的框架,在实现AJAX方面的确简单很多。更激动人心的是Struts 2的标签库支持基于模板的输出,使得开发者可以跟据自身的需要方便地改变标签的行为。

在将要发布的Struts 2.1版本中,AJAX表单校验将不再使用DWR,统一使用DOJO实现,详情请参考:http://struts.apache.org/2.0.9/docs/ajax-validation.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值