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

来源:互联网 发布:linux touch.stmp 编辑:程序博客网 时间:2024/05/17 09:06

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

view plaincopy to clipboardprint?
·········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方式异步提交的.
示例代码如下:

view plaincopy to clipboardprint?
·········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的代码:

view plaincopy to clipboardprint?
  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中的任何一个属性.