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

14.2  Struts2对Ajax的支持

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代码:
public class AjaxAction extends ActionSupport {  
    public String account;  
    public String password;  
  
    private InputStream inputStream;  
    public InputStream getInputStream() {  
        return inputStream;  
    }  
      
    public String execute() throws Exception {  
        //准备已经注册的数据,测试使用  
        Set<String> set = new HashSet<String>();  
        set.add("account1");  
        set.add("account2");  
        set.add("account3");  
          
        if(set.contains(account)){  
            inputStream = new ByteArrayInputStream("输入不正确,请重新输入".getBytes("utf-8"));  
        }else{  
            inputStream = new ByteArrayInputStream("输入正确".getBytes("utf-8"));  
        }         
        return this.SUCCESS;  
    }  
}  

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

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

java代码:
private InputStream inputStream;  
   public InputStream getInputStream() {  
       return inputStream;  
   }  

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

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

2:配置struts.xml

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

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

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

3:修改客户端

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

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

4:测试运行

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

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

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

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

相关推荐