1. 程式人生 > >在struts.xml中配置json返回型別

在struts.xml中配置json返回型別

1.JSON外掛提供了一種名為json的ResultType,一旦為某個Action指定了一個型別為json的Result,則該Result無需對映到任何檢視資源。因為JSON外掛會負責將Action裡的狀態資訊序列化成JSON格式的資料,並將該資料返回給客戶端頁面的JavaScript.

簡單地說,JSON外掛允許我們在JavaScript中非同步呼叫Action,而且Action不再需要使用檢視資源來顯示該Action裡的狀態資訊,而是由JSON外掛負責將Action裡的狀態資訊返回給呼叫頁面——通過這種方式,就可以完成Ajax互動。

Struts2提供了一種可插拔方式來管理外掛,安裝Struts2的JSON外掛與安裝普通外掛並沒有太大的區別,一樣只需要將Struts2外掛的JAR檔案複製到Web應用的WEB-INF/lib路徑下即可。

2.package要繼承json-default,因為json-default繼承了struts-default,因為在json的jar包裡有個struts2-json-plugin-2.3.24.1.jar,開啟即可看到裡面有個struts-plugin.xml,開啟即可看到json-default是繼承了struts-default:
原文:https://blog.csdn.net/eson_15/article/details/51332758 

3.JSON註釋還支援如下幾個域:

serialize:設定是否序列化該屬性

deserialize:設定是否反序列化該屬性。

format:設定用於格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd‘T‘HH:mm:ss".

4.Struts2中json的使用總結

https://blog.csdn.net/z69183787/article/details/49867623?utm_source=blogxgwz0

root引數:從返回結果中根據ognl表示式取出你需要輸出的結果

  部分使用示例

struts.xml

<package name="json" extends="json-default" namespace=

"/">

    <action name="user"  class="com.Zicheng.Action.UserAction" method="testByAction">

        <result name="success" type="json">

            <!-- 這裡指定將被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 -->

            <param name="root">dataMap</param>

        </result>

    </action>

</package>

  

UserAction.java

public class UserAction extends ActionSupport {

    private Map<String, Object> dataMap;

      public UserAction()

      {

          dataMap=new HashMap<String,Object>();

      }

    public String testByAction() {

        // dataMap中的資料將會被Struts2轉換成JSON字串,所以這裡要先清空其中的資料

        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);

 

        // 返回結果

        return SUCCESS;

    }

    /**

     * Struts2序列化指定屬性時,必須有該屬性的getter方法,實際上,如果沒有屬性,而只有getter方法也是可以的

     * @return

     */

    public Map<String, Object> getDataMap() {

        return dataMap;

    }

5配置中遇到的問題

一、Could not find action or result There is no Action mapped for namespace / and action name . - [unknown location]

經過再三查詢,最後確定是因為缺少一個包struts2-json-plugin-2.2.3.jar.

下載到這個包,此錯誤訊息。

接下來遇到錯誤

二、java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils

網上搜一下,缺少的是common-lang包。找一個加入進去,搞定不報錯了,開心呀。

三、但是一看頁面上顯示的是null,這不對。所以在網上又是繼續搜尋,最後發現沒有加getter方法,最後加了一個dataMap的get方法可以了。

struts的result方法,需要有getter/setter方法才能獲取到值。

6.SSH網上商城專案實戰

https://blog.csdn.net/eson_15/article/details/51332758