- <html>
- <head>
- <script type="text/javascript" src="js/jquery-1.11.3.js">
- </script>
- <script type="text/javascript">
- $(document).ready(function() {
- $("#myButton1").click(function() {
- $.post("/StudyExample/json/JSONAction.action",{},function(data,status){
- $("#myDiv1").html(data);
- });
- });
- });
- $(document).ready(function() {
- $("#myButton2").click(function() {
- $.post("/StudyExample/JSONAction.action",status){
- $("#myDiv2").html(data);
- });
- });
- });
- </script>
- </head>
- <body>
- <div id="myDiv1"><h2>Let AJAX change this text1</h2></div>
- <button id="myButton1" type="button">Change Content1</button>
- <div id="myDiv2"><h2>Let AJAX change this text2</h2></div>
- <button id="myButton2" type="button">Change Content2</button>
- </body>
- </html>
- import java.util.List;
- import java.util.Map;
- import java.util.HashMap;
- import java.util.Arrays;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.json.JSONObject;
- import org.apache.struts2.ServletActionContext;
- import org.springframework.context.annotation.Scope;
- import org.springframework.stereotype.Controller;
- import com.opensymphony.xwork2.ActionSupport;
- import com.jaeson.hibernatestudy.bean.Address;
- import com.jaeson.hibernatestudy.bean.User;
- @SuppressWarnings("all")
- @Scope("prototype")
- @Controller("jsonAction")
- public class JSONAction extends ActionSupport {
- @Override
- public String execute() throws Exception {
- map.put("jaeson",new Address("海淀",100,"1361"));
- map.put("chenzq",new Address("昌平",101,"1352"));
- return SUCCESS;
- }
- /**
- * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码),* HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)的PrintWriter实例。这样就会
- * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。
- */
- public void writeJSON() throws IOException{
- HttpServletResponse response=ServletActionContext.getResponse();
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out = response.getWriter();
- /*String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello,i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
- out.println(jsonString);
- out.flush();
- out.close();*/
- Map<String,User> map = new HashMap<String,User>();
- User user1 = new User();
- user1.setId("1001");
- user1.setUserName("chenzq");
- user1.setAddress(new Address("beijing",100021,"134"));
- User user2 = new User();
- user2.setId("1002");
- user2.setUserName("jaesonchen");
- user2.setAddress(new Address("shanghai",200021,"133"));
- map.put("user1",user1);
- map.put("user2",user2);
- JSONObject json = new JSONObject();
- json.accumulate("map",map);
- //JSONObject json = JSONObject.fromObject(map);
- out.println(json.toString());
- out.flush();
- out.close();
- }
- private String fieldString = "String value";
- private int fieldInt = 100;
- private double fieldDouble = 99.1;
- private boolean fieldBoolean = false;
- private int[] arrayInt = {101,102,103};
- private List<String> list = Arrays.asList("Buenos Aires","Córdoba La","La Plata");
- private Map<String,Address> map = new HashMap<String,Address>();
- //field without getter method 不会被序列化
- private String fieldNoGetter = "NoGetter value";
- public String getFieldString() {
- return fieldString;
- }
- public int getFieldInt() {
- return fieldInt;
- }
- public double getFieldDouble() {
- return fieldDouble;
- }
- public boolean isFieldBoolean() {
- return fieldBoolean;
- }
- public int[] getArrayInt() {
- return arrayInt;
- }
- public List<String> getList() {
- return list;
- }
- public Map<String,Address> getMap() {
- return map;
- }
- /**
- public String getFieldNoGetter() {
- return fieldNoGetter;
- }*/
- }
不使用JsonResult的配置:
<action name="JSONAction" class="jsonAction" method="writeJSON" />
使用JsonResult的配置:
- <package name="json" extends="json-default" namespace="/json">
- <action name="JSONAction" class="jsonAction">
- <result type="json">
- <!-- 指定内容类型,默认为application/json,IE浏览器会提示下载 -->
- <param name="contentType">text/html</param>
- <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性。
- root代表从哪里开始序列化,如果root是对象则会将root对象中所有的getter方法都进行序列化。 -->
- <!-- <param name="root">map</param> -->
- <!-- 指定是否序列化空的属性,默认为false,序列化空属性,对象为null,string为"" -->
- <!-- <param name="excludeNullProperties">true</param> -->
- <!-- 这里指定将序列化map中的那些属性 -->
- <!-- <param name="includeProperties">userList.*</param> -->
- <!-- 这里指定将要从map中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现。
- 如果相同属性同时指定exclude和include,则exclude的优先级高,因此不序列化该属性-->
- <!-- <param name="excludeProperties">
- SUCCESS
- </param> -->
- </result>
- </action>
- </package>