`

《研磨struts2》第十四章 对Ajax的支持 之 14.2 Struts2对Ajax的支持

 
阅读更多

14.2  Struts2Ajax的支持

14.2.1概述

Struts2对Ajax提供了非常好的支持,不但功能强劲,而且简单易用。

       Struts2并没有自行开发新的Ajax框架,而是使用了目前比较流行的Ajax框架——Dojo和DWR,在他们的基础之上实现了很多常见的功能。同时,Struts2也可以通过插件的形式来使用JSON,从而使得Ajax的实现更加灵活方便。

       看到这里,可能有些朋友会说:“Dojo和DWR都不会,这可怎么办?”。事实上,Struts2早替大家想好了,不需要大家直接去使用Dojo和DWR,而是直接使用Struts2提供的Ajax JSP tags即可。因此这里并不会涉及Dojo和DWR的知识,有需要的朋友,请参看相应的资料。

       当然,如果Ajax JSP tags的功能满足不了你的需要,你可以直接使用原始的Ajax技术,也可以直接使用Ajax的框架,诸如Dojo、JQuery、YUI等等。因为Struts2直接提供一个能直接向客户端返回一个输出流的Result,直接把后台处理后的数据输出回到前台,然后由Ajax来接受和处理这些数据。

14.2.2名为Stream的Result

       使用名为Stream的Result来实现跟前面直接使用Ajax的示例一样的功能。

1:实现Action

先看看Action的实现吧,功能跟前面的server.jsp类似,示例代码如下:

 

java代码:
  1. public class AjaxAction extends ActionSupport {  
  2.     public String account;  
  3.     public String password;  
  4.   
  5.     private InputStream inputStream;  
  6.     public InputStream getInputStream() {  
  7.         return inputStream;  
  8.     }  
  9.       
  10.     public String execute() throws Exception {  
  11.         //准备已经注册的数据,测试使用  
  12.         Set<String> set = new HashSet<String>();  
  13.         set.add("account1");  
  14.         set.add("account2");  
  15.         set.add("account3");  
  16.           
  17.         if(set.contains(account)){  
  18.             inputStream = new ByteArrayInputStream("输入不正确,请重新输入".getBytes("utf-8"));  
  19.         }else{  
  20.             inputStream = new ByteArrayInputStream("输入正确".getBytes("utf-8"));  
  21.         }         
  22.         return this.SUCCESS;  
  23.     }  
  24. }  

上面的实现中,属性account和password使用来接收前台页面传递过来的参数的,这个很简单,就不多说了。

要注意其中有一个inputstream,还提供了一个getter方法,如下:

 

java代码:
  1. private InputStream inputStream;  
  2.    public InputStream getInputStream() {  
  3.        return inputStream;  
  4.    }  

这是提供给result用的,result的type是“stream”,顾名思义,返回的不应该是普通的文本而是一个流了。

另外这个流要输出的内容,是在execute方法里面设置的,通过getBytes("utf-8")进行转换,不但得到了byte数组,还顺带解决了传输的中文问题。

2:配置struts.xml

Action实现好了,看看如何来配置它,需要注意result的type,示例代码如下:

 

java代码:
  1. <action name="ajaxAction" class="cn.javass.ajax.AjaxAction">  
  2.         <result  type="stream">  
  3.             <param name="contentType">text/html</param>  
  4.             <param name="inputName">inputStream</param>  
  5.         </result>  
  6.    </action>  

配置的参数contentType是指的返回的数据类型,而inputName配置的就是要返回的流,这个值和Action中定义的流类型的属性相对应。

3:修改客户端

客户端几乎没有什么变化,主要就是要修改Ajax提交到后台的路径,示例代码如下:

 

java代码:
  1. myRequest.open("GET","ajaxAction.action?account="+account,true);  

4:测试运行

       可以去测试运行一下了,效果应该和前面是一样的。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4129.html

欢迎访问http://sishuok.com获取更多内容

13
1
分享到:
评论
3 楼 zeyonq 2014-03-24  
非常感谢楼主的帮助!
2 楼 zjhptxl 2012-09-17  
leon709 写道
写得很不错啊,我测试过了,跑通了。不过我这里有个小小的疑惑:
myRequest.open("GET","ajaxAction.action?account="+account,true); 
传了变量account,在Action类中也定义了相应的变量,但是并没有account的setter和getter方法,而且使用的时候并没有获得Request,用getParameter来取请求变量,为什么能够顺利的在Action中取得这个account参数呢?

因为account的修饰符是public 不用get和set,
1 楼 leon709 2012-06-02  
写得很不错啊,我测试过了,跑通了。不过我这里有个小小的疑惑:
myRequest.open("GET","ajaxAction.action?account="+account,true); 
传了变量account,在Action类中也定义了相应的变量,但是并没有account的setter和getter方法,而且使用的时候并没有获得Request,用getParameter来取请求变量,为什么能够顺利的在Action中取得这个account参数呢?

相关推荐

    研磨Struts2配书视频对应的演示源代码

    这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...

    研磨Struts2

    ### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。

    研磨struts2 高清版

    由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。

    《研磨Struts 2》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...

    研磨Struts2配书视频对应的PPT

    《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...

    研磨Struts2 高清完整版.part2

    研磨Struts2 高清完整版,请和第一部分一起下载啊

    研磨struts

    此外,Struts2还提供了对JSP、FreeMarker等视图技术的支持。 4. **HelloWorld示例**:这是学习任何新框架的第一步。书中详细介绍了如何创建一个简单的Struts2应用,从Servlet+JSP+JavaBean实现MVC模式,然后逐步...

    研磨Struts2_12859679_高清完整版.part2.rar

    研磨Struts2_12859679_高清完整版

    研磨Struts2-高清-完整目录-2011年10月

    研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人

    研磨设计模式(完整带书签).part2.pdf

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...

    Java工程师三大框架面试题.pdf

    Java工程师三大框架面试题.pdf

    研磨设计模式-part2

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...

    研磨设计模式.part2

    研磨设计模式.part2 一定要下载5部分

    研磨设计模式.part2(共4个)

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元...

Global site tag (gtag.js) - Google Analytics