Struts2 使用jquery、Json实现Ajax的例子和注意点

1. 必须的包,一个不能少!!

  json-lib-2.3-jdk15.jar
  struts2-json-plugin-2.3.3.jar
  commons-beanutils-1.8.3.jar, 
  commons-collections-3.2.1.jar, 
  commons-logging-1.1.1.jar, 
  commons-logging-1.1.1.jar, 
  ezmorph-1.0.6.jar  (缺少此包的话,容易导致奇怪问题,如执行中途跳出等)

 

2. struts.xml中

	<!-- 此处要继承一个默认的空间json-default  -->
	<package name="jsonDemo" extends="json-default">
		<action name="jsonAction" class="action.JsonDemo">
			<!-- 返回类型 是json -->
			<result type="json">
				<!--name必须为root,result是Action中的要返回给前台的属性名  -->
				<param name="root">result</param>
			</result>
		</action>	
	</package>

 

3. Action的代码

public class JsonDemo implements Action {

	// 用于传递数据的属性
	private String name;
	private String result;
	private Muer mm;

	public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("action");
		mm = new Muer();
		mm.setAge("20");
		mm.setName(name);
		mm.setLevel("very beautiful");
		System.out.println("age" + mm.getAge() + "  name:" + mm.getName()
				+ " level:" + mm.getLevel());
		JSONObject obj = JSONObject.fromObject(mm);
		result = obj.toString();
		System.out.println("JSON字符串为:" + result);
		return SUCCESS;
	}
	//略去各个属性的getter 和setter方法

}

 


4. jsp 页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<script type="text/javascript" src="js/jquery.js" ></script>
    
    <title>struts2 ajax json demo1</title>
	
	<script type="text/javascript">
    	$(document).ready(function(e) {
            
			$("#btn").click(function(e) {	
								
				var name = $("#name").val();
                                     $.post(
					"jsonAction.action",
					{name:name},
					function(data){
						var mm = eval("("+data+")");					
						alert(mm.name);
						alert(mm.age);
						alert(mm.level);
					},
					"json"
					);
				
            });
			
        });
    
    </script>
	
  </head>
  
  <body>
  	<s:textfield name="name"  id="name" theme="simple"/>
    <s:submit id="btn" value="showJson"  theme="simple" />
  </body>
</html>




总结一下,要注意几个地方

 1. 包一个都别少...

 2. 送action传回的数据要做一次处理 var mm = eval("("+data+")");

3 . 可以用获取属性的方式调用eval处理之后的对象 mm.name

 

补充下: struts2使用json传递List集合到前台页面:

	//获取公司对应的库位 ajax
	public String getLgortByBukrs(){
		
		try {
			//System.out.println(bukrs);
                            //此处通过Service类获取一个List集合
			List<T001L> lgortList = t001lServices.getLgortByBukrs(bukrs);
                           //将List集合转换为JSONArray对象
			JSONArray jArray = JSONArray.fromObject(lgortList);
                           //转换为json串
			result = jArray.toString();
			//System.out.println(result);
			return SUCCESS;
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}	
		
		return null;
	}


 

 

  

 


 

 

 

posted on 2012-09-26 13:44  babyblue  阅读(154)  评论(0)    收藏  举报