天天看點

Struts2 傳回JSON資料方法(一)使用json-default

今天寫AJAX動态判斷登陸使用者名密碼,查資料鼓搗了一天傳回JSON資料的問題,終于弄好了。

JSON建構于兩種結構:

1.“名稱/值”對的集合。不同的語言中,它被了解為對象(object),紀錄(record),結構 (struct),字典(dictionary),哈希表(hashtable),有鍵清單(keyedlist),或者關聯數組 (associativearray)。

2.值的有序清單。在大部分語言中,它被了解為數組(array)。這些都是常見的資料結構。JSON形式事實上大部分現代計算機語言都以某種形式支援它們。這使得一種資料格式在同樣基于這些結構的程式設計語言之間交換成為可能。(JSON弄明白了還是有好處啊。)

JSON具有以下這些形式:

1. 對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括号)開始,“}”(右括号)結束。每個“名稱”後跟一個“:”(冒号);“‘JSON形 式名稱/值’對”之間使用“,”(逗号)分隔。例:{"name":"張三","age":20,"birthday":"1982-07-20"}

這是對象在json中的表示形式.即{"key1":"value1","key2":"value2",...}

2.數組是值(value)的有序集合。一個數組以“[”(左中括号)開始,“]”(右中括号)結束。值之間使用“,”(逗号)分隔。例:["張三","李四","王五"]這是數組在json中的表示形式.即[value1,value2,value3,....]

我用的是名稱/值 的形式

首先是用struts2自帶的處理方法。 這需要引入幾個JAR

我的是struts2.3.7的

struts2-json-plugin-2.3.4.1.jar

commons-logging-1.1.1.jar

json-lib-2.3-jdk15.jar

以下是Action的代碼

public class LoginAction extends ActionSuppor{

    //将要被Struts2序列化為JSON字元串的對象    
    Map<String, Object> message;
    public Map<String, Object> getMessage() {
        return message;
    }

    public void setMessage(Map<String, Object> message) {
        this.message = message;
    }

    //驗證登陸
    public String loginTch() {
        message = new HashMap<String, Object>();

        // message中的資料将會被Struts2轉換成JSON字元串,是以這裡要先清空其中的資料(本來就沒資料啊,-,-不知道有沒有必要)
        message.clear();    
        message.put("loginError", "密碼錯誤!");
    }
    return SUCCESS;
}      

下面是struts.xml裡面的配置

<struts>
    <!-- 注意:這裡是json-default,json-default是struts-default的子類 -->
    <package name="default" namespace="/" extends="json-default">
        <action name="loginAction" class="com.action.LoginAction" method="loginTch">
            <result name="success" type="json">
            <!-- 這裡指定将被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 -->
            <param name="root">message</param>
            </result>
        </action>
    </package>
</struts>      

OK jsp代碼

<!-- 用于顯示消息 -->
<head>
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
  function doSubmit() {
    $.ajax({
    type: "GET",
    url: "loginAction",
    dataType: "json",
    cache: false,
    success: function(data) {
      $.each(data, function(key, val) {
        if (key == "loginError" && val != ''){
          $("#mes").html(val);
            return false;
        }
      });
    }
  });
  }
</script>
</head>
<body>
  <div id="mes">
  </div>
  <button type="button" onlick="doSubmit()">送出</button>
</body>      

轉載于:https://www.cnblogs.com/astrocc/archive/2012/10/24/2737332.html