热门标签 | 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校验效果。


推荐阅读
  • XMLhttpREquest_Ajax技术总结之XmlHttpRequest
    Ajax1、 什么是ajax   ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 如何提高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社区 版权所有