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代码如下所示:


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

<? 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

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类没有任何区别。

注:如需本例的源代码可email至lldwolf@163.com索引,因集成struts2的jar包,所以大小约为3M

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值