Struts2.1.6中关于JSON的配置和使用

 JSON的优点众所周知,在此不作叙述.
JSON在AJAX的应该比较的多些,下面结合一下struts2.1.6和大家分享一下

1,需要把jsonplugin-0.33.jar拷贝到Web-INF/lib目录下.
       关于这个JAR包是JSON在struts2.1.6插件包.里面有我们要用到的struts-plugin.xml,关于这个JAR包,经过本人的测试和网上的搜索,得出最新的0.7版本在cglib方面存在着问题,建议大家使用0.33版本.
2,在struts2.1.6的配置文件中进行配置,就是返回的类型是json,并且要为JSON数据单独创建一个Package,继承的包不再是struts-default,而是json-default
示例代码如下:

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. < package   name = "json"   namespace = "/json"   extends = "json-default" >    
  2.     <!-- 测试Json的例子 -->    
  3.     < action   name = "jsonTest_*"   class = "jsonTest"   method = "{1}" >    
  4.          < result   name = "jsonres"   type = "json" />    
  5.     </ action >    
  6. </ package >    


3,前台页面用Ajax接收到的是JSON数据格式,
{"hashMap":{"name":"wangsh","pass":"qihuan"},"pass":"这是密码啊Password","username":"wangsh"}.
本人的前采用的是Jquery1.2.6中的Ajax Post方式异步提交的.
示例代码如下:

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. < %@ page  language = "java"   import = "java.util.*"   pageEncoding = "UTF-8" % >    
  2. < %@ page  contentType = "text/html; charset=UTF-8" % >    
  3. < %@ taglib  prefix = "s"   uri = "/struts-tags" % >    
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">    
  5. < html >    
  6.     < head >    
  7.        < title > < s:text   name = "%{getText('regsiterpagetitle')}"   />    
  8.        </ title >    
  9.        < meta   http-equiv = "pragma"   content = "no-cache" >    
  10.        < meta   http-equiv = "cache-control"   content = "no-cache" >    
  11.        < meta   http-equiv = "expires"   content = "0" >    
  12.        < meta   http-equiv = "keywords"   content = "keyword1,keyword2,keyword3" >    
  13.        < meta   http-equiv = "description"   content = "This is my page" >    
  14.        < SCRIPT   type = "text/javascript"    
  15.            src = "${pageContext.request.contextPath}/common/resource/jquery-1.2.6.js"   mce_src = "${pageContext.request.contextPath}/common/resource/jquery-1.2.6.js" > </ SCRIPT >    
  16.          
  17.        < SCRIPT   type = "text/javascript" >    
  18.            function testJosn()   
  19.            {   
  20.               $.post(   
  21.               "${pageContext.request.contextPath}/json/jsonTest_jsontest.html",   
  22.               {username:"wangsh"},   
  23.               function (data)   
  24.               {   
  25.                   window.alert(data+"=====");   
  26.                   eval("json ="+data);   
  27.                   window.alert("----------"+json.username);   
  28.                   $("#testjson").html(data);   
  29.               }   
  30.               );   
  31.            }   
  32.        </ SCRIPT >    
  33.     </ head >    
  34.     < body >    
  35.        < a    
  36.            href = "${pageContext.request.contextPath}/json/jsonTest_jsontest.html"   mce_href = "${pageContext.request.contextPath}/json/jsonTest_jsontest.html" > 测试Json </ a >    
  37.        < button   name = "测试JSON"   id = "testbut"   onclick = "testJosn();" >    
  38.            测试JSON   
  39.        </ button >    
  40.        < div   id = "testjson" > </ div >    
  41.     </ body >    
  42. </ html >    




可能细心的朋友已看到了:
eval("json="+data);
window.alert("----------"+json.username);
以上的代码是何义呢?
Data是Action返回的数据.
以下是Action的代码:

  1. package  com.wang.struts2.action;   
  2.   
  3. import  java.util.HashMap;   
  4. import  java.util.Map;   
  5.   
  6. import  org.apache.commons.logging.Log;   
  7. import  org.apache.commons.logging.LogFactory;   
  8.   
  9. import  com.opensymphony.xwork2.ActionSupport;   
  10.   
  11. public   class  JosnTestAction  extends  ActionSupport   
  12. {   
  13.        private  Log log = LogFactory.getLog(JosnTestAction. class );   
  14.        private  String username;   
  15.        private  String pass;   
  16.        private  Map<String, String> hashMap =  new  HashMap<String, String>();   
  17.   
  18.        public  String getUsername()   
  19.        {   
  20.               return  username;   
  21.        }   
  22.   
  23.        public   void  setUsername(String username)   
  24.        {   
  25.               this .username = username;   
  26.        }   
  27.   
  28.        public  Map<String, String> getHashMap()   
  29.        {   
  30.               return  hashMap;   
  31.        }   
  32.   
  33.        public   void  setHashMap(Map<String, String> hashMap)   
  34.        {   
  35.               this .hashMap = hashMap;   
  36.        }   
  37.   
  38.        public  String getPass()   
  39.        {   
  40.               return  pass;   
  41.        }   
  42.   
  43.        public   void  setPass(String pass)   
  44.        {   
  45.               this .pass = pass;   
  46.        }   
  47.   
  48.        public  String jsontest()  throws  Exception   
  49.        {   
  50.               hashMap.put("name"this .getUsername());   
  51.               hashMap.put("pass""qihuan" );   
  52.               this .setPass( "这是密码啊Password" );   
  53.               log.info("===========测试JSON============" );   
  54.               return   "jsonres" ;   
  55.        }   
  56. }   


也就是说服务器返加在的数据是所有的Action属性,当然要提供读写器(get和Set方法)的.
我们可以采用简单的两行代码
eval("json="+data);//将JSON转化为一个对象,并且名为joson
window.alert("----------"+json.username);//打印出Username的值
window.alert("----------"+json.hashMap.pass);//拿到的是Map中的某个值.
可以很方便的取得JSON中的任何一个属性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值