热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

struts2提供Ajax支持,登录框局部刷新实例

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

  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文件的代码也是固的:

"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">











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页面的代码:

<%@ page language="java" cOntentType="text/html; charset=GBK"%>

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







请输入您的注册信息














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

三. 设置校验规则

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

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

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

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



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






true
必须输入名字




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






true
必须输入密码




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





1
150
年纪必须在1到150之间






1900-01-01
2050-02-21
年纪必须在${min}到${max}之间




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


推荐阅读
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
author-avatar
宋紫紫云__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有