J2EE下使用AJAX(五) jsonplugin -- struts2下的AJAX插件

对于使用XmlHttpRequest实现AJAX,依赖于在服务器端使用Response对象生成返回结果。在struts 1.x版本中,这一点不成问题,但对于struts2中,其MVC框架中隐藏了Request、Response这些对象。不过这一点问题不大,我们仍然可以使用某些手段取得这些对象。但这不是本节讲述的内容,本节主要讲述struts2下的AJAX工具jsonplugin,它是由Google发布的,也算是身出名门,其官方首页为 http://cwiki.apache.org/S2PLUGINS/json-plugin.html

该插件可以将Action类中的属性(带getter和setter的成员变量)以JSON格式返回,与struts2集成的相当完美,只需在映射配置文件中做很少的改动即可。

本节只讲述如何使用jsonplugin,有关struts2的使用及JSON格式说明,请参考本人相关的文章。

JSON入门


与jsonplugin相关的内容体现在如下几个文件中:

index.jsp:发送请求并获取JSON格式结果 struts-test.xml:struts2的action映射配置 JsonTestAction.java:请求处理Action类
5.1 index.jsp
为了避免麻烦,我仍然使用最原始的XmlHttpRequest请求方式,相关JS代码如下所示:

  1. var bXmlHttpSupport = (typeof XMLHttpRequest != "undefined" || window.ActiveXObject);   
  2.   
  3. function GetXMLHttpRequest()    
  4. {   
  5.     var oRequest;   
  6.     if(window.ActiveXObject)   
  7.     {   
  8.         var arrSignatures = ["MSXML2.XMLHTTP.6.0""MSXML2.XMLHTTP.5.0""MSXML2.XMLHTTP.4.0",   
  9.                              "MSXML2.XMLHTTP.3.0""MSXML2.XMLHTTP",   
  10.                              "Microsoft.XMLHTTP"];   
  11.                             
  12.         for (var i=0; i < arrSignatures.length; i++) {   
  13.             try {           
  14.                 oRequest = new ActiveXObject(arrSignatures[i]);               
  15.                 return oRequest;           
  16.             } catch (oError) { /**//*ignore*/ }   
  17.         }             
  18.     }   
  19.     else if(window.XMLHttpRequest)   
  20.     {   
  21.         oRequest = new XMLHttpRequest();   
  22.         //oRequest.overrideMimeType('text/html');   
  23.         return oRequest;   
  24.     }   
  25.   
  26.     throw new Error("MSXML is not installed on your system.");                  
  27. }   
  28.   
  29. function json_ajax()   
  30. {   
  31.     if(bXmlHttpSupport)   
  32.     {   
  33.         var frm = document.form1;   
  34.         var sUrl = "test/Hello.action?helloStr=London";   
  35.         var oRequest = GetXMLHttpRequest();   
  36.         oRequest.onreadystatechange = function()    
  37.         {   
  38.             if(oRequest.readyState == 4)    
  39.             {   
  40.                 if(oRequest.status == 200)   
  41.                 {   
  42.                     var o = eval("(" + oRequest.responseText + ")");   
  43.                     alert(o.helloStr);   
  44.                 }   
  45.                 else  
  46.                     alert("Unknown resource: " + oRequest.statusText);   
  47.             }   
  48.         };   
  49.         oRequest.open('POST', sUrl);   
  50.         oRequest.send(null);   
  51.     }   
  52. }  
var bXmlHttpSupport = (typeof XMLHttpRequest != "undefined" || window.ActiveXObject);

function GetXMLHttpRequest() 
{
    var oRequest;
    if(window.ActiveXObject)
    {
        var arrSignatures = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
                             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                             "Microsoft.XMLHTTP"];
                         
        for (var i=0; i < arrSignatures.length; i++) {
            try {        
                oRequest = new ActiveXObject(arrSignatures[i]);            
                return oRequest;        
            } catch (oError) { /**//*ignore*/ }
        }          
    }
    else if(window.XMLHttpRequest)
    {
        oRequest = new XMLHttpRequest();
        //oRequest.overrideMimeType('text/html');
        return oRequest;
    }

    throw new Error("MSXML is not installed on your system.");               
}

function json_ajax()
{
    if(bXmlHttpSupport)
    {
        var frm = document.form1;
        var sUrl = "test/Hello.action?helloStr=London";
        var oRequest = GetXMLHttpRequest();
        oRequest.onreadystatechange = function() 
        {
            if(oRequest.readyState == 4) 
            {
                if(oRequest.status == 200)
                {
                    var o = eval("(" + oRequest.responseText + ")");
                    alert(o.helloStr);
                }
                else
                    alert("Unknown resource: " + oRequest.statusText);
            }
        };
        oRequest.open('POST', sUrl);
        oRequest.send(null);
    }
}


与例1最大的改变在于使用如下代码

var o = eval("(" + oRequest.responseText + ")");获取返回的JSON对象。

5.2 struts-test.xml
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE struts PUBLIC   
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd">   
  5.   
  6. <struts>   
  7.   
  8.     <package name="test" namespace="/test" extends="json-default">   
  9.   
  10.         <action name="Hello" class="lld.test.ajax.struts2json.JsonTestAction">   
  11.             <result type="json" />   
  12.         </action>   
  13.            
  14.     </package>   
  15. </struts>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="test" namespace="/test" extends="json-default">

        <action name="Hello" class="lld.test.ajax.struts2json.JsonTestAction">
            <result type="json" />
        </action>
        
    </package>
</struts>

这个与标准的struts2映射配置的区别为,在package标签中,extends的属性为“json-default”,而不是“struts-default”,同里,对每个action标签中的result,添加属性
type="json"

5.3 JsonTestAction.java
  1. package lld.test.ajax.struts2json;   
  2. import com.opensymphony.xwork2.ActionSupport;   
  3.   
  4.   
  5. public class JsonTestAction extends ActionSupport   
  6. {   
  7.     private static final long serialVersionUID = 2949104549856769172L;   
  8.        
  9.     private String helloStr;   
  10.   
  11.     public String getHelloStr()   
  12.     {   
  13.         return helloStr;   
  14.     }   
  15.   
  16.     public void setHelloStr(String helloStr)   
  17.     {   
  18.         this.helloStr = helloStr;   
  19.     }   
  20.        
  21.     public String execute() throws Exception   
  22.     {   
  23.         this.setHelloStr("Hello, " + this.helloStr);    
  24.         return SUCCESS;   
  25.     }   
  26. }  
package lld.test.ajax.struts2json;
import com.opensymphony.xwork2.ActionSupport;


public class JsonTestAction extends ActionSupport
{
    private static final long serialVersionUID = 2949104549856769172L;
    
    private String helloStr;

    public String getHelloStr()
    {
        return helloStr;
    }

    public void setHelloStr(String helloStr)
    {
        this.helloStr = helloStr;
    }
    
    public String execute() throws Exception
    {
        this.setHelloStr("Hello, " + this.helloStr); 
        return SUCCESS;
    }
}
这个类与标准的struts2 Action类没有任何区别。
原文链接地址: http://www.java2000.net/p4157
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值