当前位置: 代码迷 >> JavaScript >> struts2.1.6中关于JSON的配备和使用
  详细解决方案

struts2.1.6中关于JSON的配备和使用

热度:293   发布时间:2012-09-23 10:28:11.0
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
示例代码如下:

Xml代码 复制代码
  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>???
<package name="json" namespace="/json" extends="json-default"> 
       <!-- 测试Json的例子 --> 
       <action name="jsonTest_*" class="jsonTest" method="{1}"> 
           <result name="jsonres" type="json"/> 
       </action> 
    </package> 

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

?

Java代码 复制代码
  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"></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">测试Json</a>? ??
  37. ???????<button?name="测试JSON"?id="testbut"?onclick="testJosn();">? ??
  38. ???????????测试JSON? ??
  39. ???????</button>? ??
  40. ???????<div?id="testjson"></div>? ??
  41. ????</body>? ??
  42. </html>???
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ page contentType="text/html; charset=UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
       <title><s:text name="%{getText('regsiterpagetitle')}" /> 
       </title> 
       <meta http-equiv="pragma" content="no-cache"> 
       <meta http-equiv="cache-control" content="no-cache"> 
       <meta http-equiv="expires" content="0"> 
       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
       <meta http-equiv="description" content="This is my page"> 
       <SCRIPT type="text/javascript" 
           src="${pageContext.request.contextPath}/common/resource/jquery-1.2.6.js"></SCRIPT> 
       
       <SCRIPT type="text/javascript"> 
           function testJosn() 
           { 
              $.post( 
              "${pageContext.request.contextPath}/json/jsonTest_jsontest.html", 
              {username:"wangsh"}, 
              function (data) 
              { 
                  window.alert(data+"====="); 
                  eval("json="+data); 
                  window.alert("----------"+json.username); 
                  $("#testjson").html(data); 
              } 
              ); 
           } 
       </SCRIPT> 
    </head> 
    <body> 
       <a 
           href="${pageContext.request.contextPath}/json/jsonTest_jsontest.html">测试Json</a> 
       <button name="测试JSON" id="testbut" onclick="testJosn();"> 
           测试JSON 
       </button> 
       <div id="testjson"></div> 
    </body> 
</html> 

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

Java代码 复制代码
  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. }???
package com.wang.struts2.action; 

import java.util.HashMap; 
import java.util.Map; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import com.opensymphony.xwork2.ActionSupport; 

public class JosnTestAction extends ActionSupport 
{ 
       private Log log = LogFactory.getLog(JosnTestAction.class); 
       private String username; 
       private String pass; 
       private Map<String, String> hashMap = new HashMap<String, String>(); 

       public String getUsername() 
       { 
              return username; 
       } 

       public void setUsername(String username) 
       { 
              this.username = username; 
       } 

       public Map<String, String> getHashMap() 
       { 
              return hashMap; 
       } 

       public void setHashMap(Map<String, String> hashMap) 
       { 
              this.hashMap = hashMap; 
       } 

       public String getPass() 
       { 
              return pass; 
       } 

       public void setPass(String pass) 
       { 
              this.pass = pass; 
       } 

       public String jsontest() throws Exception 
       { 
              hashMap.put("name", this.getUsername()); 
              hashMap.put("pass", "qihuan"); 
              this.setPass("这是密码啊Password"); 
              log.info("===========测试JSON============"); 
              return "jsonres"; 
       } 
} 

?
也就是说服务器返加在的数据是所有的Action属性,当然要提供读写器(get和Set方法)的.
我们可以采用简单的两行代码

Js代码 复制代码
  1. eval("json="+data);//将JSON转化为一个对象,并且名为joson? ??
  2. window.alert("----------"+json.username);//打印出Username的值? ??
  3. window.alert("----------"+json.hashMap.pass);//拿到的是Map中的某个值.???
eval("json="+data);//将JSON转化为一个对象,并且名为joson 
window.alert("----------"+json.username);//打印出Username的值 
window.alert("----------"+json.hashMap.pass);//拿到的是Map中的某个值. 

?
可以很方便的取得JSON中的任何一个属性.

  相关解决方案