Struts2 Ajax 应用(不再书写type="json")

struts2 的书籍以及文章中,多数在Ajax应用的时候,要求在struts.xml文件中需要对ajax的返回类型进行配置。如:

type="json"。使用这个配置的时候,必须使用struts2的json插件的jar包。

解决方案:

我给出的方案是:

     不使用struts2的json插件的jar包,不需要配置struts.xml中的type="json"

具体实现如下:

     使用json-lib.jar(下载地址:http://sourceforge.net/projects/json-lib/files/),需要的环境和jar包:

Json-lib requires (at least) the following dependencies in your classpath:

  • jakarta commons-lang 2.4
  • jakarta commons-beanutils 1.7.0
  • jakarta commons-collections 3.2
  • jakarta commons-logging 1.1.1
  • ezmorph 1.0.6

web页面,js里面,我书写的代码(jQuery):

 

Js代码 复制代码
  1. var options = {   
  2.     url: 'test/jsonTest.do',   
  3.     type:'POST',   
  4.     dataType:'json',//指定返回数据的解析类型,也可以是 xml   
  5.     data:{   
  6.      name:'lilei',   
  7.      sex:'1'  
  8.     },   
  9.     success:function(rs){   
  10.      if(rs.person){   
  11.       alert(rs.name + '/t' + rs.sex);   
  12.     }   
  13.     },   
  14.     error: function(rs){},   
  15.     timeout:3000   
  16. };   
  17.   
  18. $.ajax(options);  

 struts.xml 配置文件:

Xml代码 复制代码
  1. <package name="test" namespace="/test" extends="struts-default">  
  2.     <action name="jsonTest" class="test.JsonTestAction" method="jsonTest">  
  3.     <!-- 注意,这里我什么都没有写,是空的 因为JsonTestAction里面的jsonTest的返回类型为 void -->  
  4.     </action>  
  5. </package>      

 Action  JsonTestAction的代码:

Java代码 复制代码
  1. public class JsonTestAction extends ActionSupport implements  
  2.         ServletResponseAware {   
  3.             private HttpServletResponse response;   
  4.                
  5.             // -------------- tool methods   
  6.                
  7.                
  8.             /**  
  9.              * 注意:因为struts2.xml 里面没有写 <result></result> 这个项,所有这里的类型是 void,而不是 String  
  10.              *   
  11.              *  
  12.              *  
  13.              */  
  14.             public void jsonTest(){   
  15.                 String name = ServletActionContext.getRequest().getParameter("name");   
  16.                 Integer sex = Integer.valueOf(ServletActionContext.getRequest().getParameter("sex"));   
  17.                    
  18.                 JSONObject json = new JSONObject();   
  19.                 json.put("name",name);   
  20.                 if(sex.initValue == 1){   
  21.                     json.put("sex","男"):   
  22.                 }else{   
  23.                     json.put("sex","女"):   
  24.                 }   
  25.                 printToJson(json.toString());   
  26.             }   
  27.                
  28.     /**  
  29.      * 这里我指定了放回的类型 "text/json" 也可以是xml等其他类型  
  30.      * 用response直接将数据打回到页面的 ajax 的请求里面去  
  31.      *  
  32.      */        
  33.     private void printToJson(String jsonStr) {   
  34.         try {   
  35.             response.setCharacterEncoding("UTF-8");   
  36.             response.setContentType("text/json");   
  37.             response.setDateHeader("Expires"0);   
  38.             PrintWriter out = response.getWriter();   
  39.   
  40.             out.println(jsonStr);   
  41.   
  42.             out.flush();   
  43.             out.close();   
  44.         } catch (IOException e) {   
  45.             e.printStackTrace();   
  46.         }   
  47.     }   
  48.        
  49.     //实现 ServletResponseAware 接口,必须实现的方法   
  50.     public void setServletResponse(HttpServletResponse response) {   
  51.         this.response = response;   
  52.     }   
  53. }              
public class JsonTestAction extends ActionSupport implements
		ServletResponseAware {
			private HttpServletResponse response;
			
			// -------------- tool methods
			
			
			/**
			 * 注意:因为struts2.xml 里面没有写 <result></result> 这个项,所有这里的类型是 void,而不是 String
			 * 
			 *
			 *
			 */
			public void jsonTest(){
				String name = ServletActionContext.getRequest().getParameter("name");
				Integer sex = Integer.valueOf(ServletActionContext.getRequest().getParameter("sex"));
				
				JSONObject json = new JSONObject();
				json.put("name",name);
				if(sex.initValue == 1){
					json.put("sex","男"):
				}else{
					json.put("sex","女"):
				}
				printToJson(json.toString());
			}
			
	/**
	 * 这里我指定了放回的类型 "text/json" 也可以是xml等其他类型
	 * 用response直接将数据打回到页面的 ajax 的请求里面去
	 *
	 */		
	private void printToJson(String jsonStr) {
		try {
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/json");
			response.setDateHeader("Expires", 0);
			PrintWriter out = response.getWriter();

			out.println(jsonStr);

			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//实现 ServletResponseAware 接口,必须实现的方法
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}
}			 

 

 

这样,就可以通过上面的Action类,将所要的数据,通过response直接到回到ajax的请求里面去。

问题解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值