下面是整個Action的完整代碼:
package cn.ysh.studio.struts2.json.demo.action;  import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map;  import javax.servlet.http.HttpServletResponse;  import org.apache.struts2.ServletActionContext;  import net.sf.json.JSONObject;  import cn.ysh.studio.struts2.json.demo.bean.User;  import com.opensymphony.xwork2.ActionSupport;  public class UserAction extends ActionSupport {    /**    *    */   private static final long serialVersionUID = 1L;    //將會被Struts2序列化為JSON字符串的對象   private Map<String, Object> dataMap;    /**    * 構(gòu)造方法    */   public UserAction() {     //初始化Map對象     dataMap = new HashMap<String, Object>();   }    /**    * 測試通過action以視圖方式返回JSON數(shù)據(jù)    * @return    */   public String testByJSP() {     User user = new User();     user.setId("123");     user.setName("JSONActionJSP");     user.setPassword("123");     user.setSay("Hello world !");     JSONObject jsonObject=new JSONObject();     jsonObject.accumulate("user", user);     jsonObject.accumulate("success", true);     //這里在request對象中放了一個data,所以struts的result配置中不能有type="redirect"     ServletActionContext.getRequest().setAttribute("data", jsonObject.toString());     return SUCCESS;   };    /**    * 測試通過action以Struts2默認方式返回JSON數(shù)據(jù)    * @return    */   public String testByAction() {     // dataMap中的數(shù)據(jù)將會被Struts2轉(zhuǎn)換成JSON字符串,所以這里要先清空其中的數(shù)據(jù)     dataMap.clear();     User user = new User();     user.setId("123");     user.setName("JSONActionStruts2");     user.setPassword("123");     user.setSay("Hello world !");     dataMap.put("user", user);     // 放入一個是否操作成功的標識     dataMap.put("success", true);     // 返回結(jié)果     return SUCCESS;   }    /**    * 通過action是以傳統(tǒng)方式返回JSON數(shù)據(jù)    * @throws IOException    */   public void doAction() throws IOException{     HttpServletResponse response=ServletActionContext.getResponse();     //以下代碼從JSON.java中拷過來的     response.setContentType("text/html");     PrintWriter out;     out = response.getWriter();     //將要被返回到客戶端的對象     User user=new User();     user.setId("123");     user.setName("JSONActionGeneral");     user.setPassword("JSON");     user.setSay("Hello , i am a action to print a json!");     JSONObject json=new JSONObject();     json.accumulate("success", true);     json.accumulate("user", user);     out.println(json.toString()); //   因為JSON數(shù)據(jù)在傳遞過程中是以普通字符串形式傳遞的,所以我們也可以手動拼接符合JSON語法規(guī)范的字符串輸出到客戶端 //   以下這兩句的作用與38-46行代碼的作用是一樣的,將向客戶端返回一個User對象,和一個success字段 //   String jsonString="{/"user/":{/"id/":/"123/",/"name/":/"JSONActionGeneral/",/"say/":/"Hello , i am a action to print a json!/",/"password/":/"JSON/"},/"success/":true}"; //   out.println(jsonString);     out.flush();     out.close();   }      /**    * Struts2序列化指定屬性時,必須有該屬性的getter方法,實際上,如果沒有屬性,而只有g(shù)etter方法也是可以的    * @return    */   public Map<String, Object> getDataMap() {     return dataMap;   }  } 完整的struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="json" extends="json-default" namespace="/test"> <action name="testByAction" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction"> <result type="json"> <!-- 這里指定將被Struts2序列化的屬性,該屬性在action中必須有對應(yīng)的getter方法 --> <!-- 默認將會序列所有有返回值的getter方法的值,而無論該方法是否有對應(yīng)屬性 --> <param name="root">dataMap</param> <!-- 指定是否序列化空的屬性 --> <!-- <param name="excludeNullProperties">true</param> --> <!-- 這里指定將序列化dataMap中的那些屬性 --> <!-- <param name="includeProperties"> userList.* </param> --> <!-- 這里指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一半不與上邊的參數(shù)配置同時出現(xiàn) --> <!-- <param name="excludeProperties"> SUCCESS </param> --> </result> </action> </package> <package name="default" extends="struts-default" namespace="/"> <action name="testJSONFromActionByGeneral" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="doAction"> </action> <action name="testByJSP" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByJSP"> <result name="success">/actionJSP.jsp</result> </action> </package> </struts>
以上這篇在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。
新聞熱點
疑難解答