亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于Strut2內置Json插件的使用

2019-11-14 20:57:48
字體:
來源:轉載
供稿:網友
關于Strut2內置Json插件的使用

配置注意點:

  • 在原有Struts2框架jar包的引入下,需要額外多加一個Json的插件包(struts2-json-plugin-2.3.7.jar)
  • 在struts.xml配置文件中,包需要繼承json-default,然后把result的類型改為json
  •  <package name="xxx" extends="json-default">
    <result name="success" type="json"></result>

一、先來個簡單示例,利用Struts2+jQuery+JSON實現異步交互,返回一個字符串

1、index.jsp

很簡單的一個頁面,利用Ajax異步向test1.action發送一個post請求,傳遞了一個參數name,然后把回調函數返回的值顯示在頁面。

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4     <head> 5         <script type="text/Javascript" src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script> 6         <script type="text/javascript"> 7             $("document").ready(function(){ 8                 $.post("test1.action",{"name":"Balla_兔子"},function(data){ 9                     console.info(data);10                     $("#info").html(data.info);11                 });12             13             });14         </script>15     </head>16 17     <body>18         Hello,Struts2!<div id="info"></div>19     </body>20 </html>

2、TestAction.java

因為頁面發送了一個參數名為name的參數,在這邊我們用屬性注入的方式,給成員變量一個setter方法賦值,返回提供了一個getter方法作為回調函數的返回值。

Struts2的Json插件,默認將值棧(root)的頂端對象返回(所有getter方法),在沒有實現模型驅動類ModelDriven的前提下,值棧的頂端對象為Action(也就是返回Action里所有的getter方法,若有各別方法不想返回,只需要在該方法的上面添加一個@JSON(serialize=false)注解即可)

如:

@JSON(serialize=false)public String getAge() {    return "我今年10歲了";}

 1 package com.lcw.struts.json; 2  3 import com.opensymphony.xwork2.ActionSupport; 4  5 public class TestAction extends ActionSupport { 6  7     PRivate String name;     8     private String info; 9     10     public String getInfo() {11         return "我是:"+name;12     }13 14     public void setName(String name) {15         this.name = name;16     }17 18     public String test1() {19         return "success";20 21     }22 }

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4     "http://struts.apache.org/dtds/struts-2.3.dtd"> 5  6 <struts>     7         <constant name="struts.i18n.encoding" value="UTF-8"/> 8         <constant name="struts.devMode" value="true" /> 9         <package name="strutsjson" extends="json-default" namespace="/">10             <action name="test1" class="com.lcw.struts.json.TestAction">11                 <result name="success" type="json">/index.jsp</result>12             </action>13         </package>14 </struts>

下面是頁面效果:(這里只是簡單舉例,也可以實現一些業務邏輯功能,比如驗證用戶的賬號,可以在Action調用持久層的數據查詢,返回布爾值,在回調函數里進行進一步操作)

二、下面來說下關于更為實用的實例,比如如何返回一個List集合,對象等復雜數據,在前臺接受數據中,只能識別字符類型的信息,比如Xml,Json,Html字符等,是無法識別List集合的,那我們應該怎么做呢?

TestAction.java

這次在Action加入了模型驅動類,然后定義了一個User類并提供了setter和getter方法,把該對象添加到一個List集合里去,并提供getter方法以便返回數據。

 1 package com.lcw.struts.json; 2  3 import java.util.ArrayList; 4 import java.util.List; 5  6 import com.opensymphony.xwork2.ActionSupport; 7 import com.opensymphony.xwork2.ModelDriven; 8  9 public class TestAction extends ActionSupport implements ModelDriven<User> {10 11     private User user = new User();12 13     public User getModel() {14         return user;15     }16 17     private List<User> list;18 19     public List<User> getList() {20         return list;21     }22 23     public String test1(){24         list = new ArrayList<User>();25         User user = new User();26         list.add(new User("1", "張三"));27         list.add(new User("2", "李四"));28         return "success";29     }30 31 }

User.java

package com.lcw.struts.json;public class User {    private String id;    private String name;    public User() {    }    public User(String id, String name) {        super();        this.id = id;        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

保持配置文件不變,我們來看頁面看看結果:

打開firebug調試查看,會發現

為何傳遞過來的數據會為空呢?不知道大家是否留意上文提到的一句話

Struts2的Json插件,默認將值棧(root)的頂端對象返回(所有getter方法),在沒有實現模型驅動類ModelDriven的前提下,值棧的頂端對象為Action(也就是返回Action里所有的getter方法)

我們上面實現了模型驅動類,也就意味著值棧的棧頂對象此時也不再是Action了,而是Model,所以返回的數據為空。那要怎么辦呢?其實很簡單,只需要我們改變默認返回的戰隊對象就可以了,把它設置成Action。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>            <constant name="struts.i18n.encoding" value="UTF-8"/>        <constant name="struts.devMode" value="true" />        <package name="strutsjson" extends="json-default" namespace="/">            <action name="test" class="com.lcw.struts.json.TestAction" method="test1">                <result name="success" type="json">                    <param name="root">action</param>                </result>            </action>        </package></struts>

只要在result里添加一個參數root并設置成action就可以了,我們來看下此時的效果:

這是我們就可以利用(data.list[x].name等)取出其中的數據了。

那我們可不可以不要一起把所有的數據都返回回來,只返回部分數據呢?除了之前說的那個Json注解(只要@JSON注解,屬性將永遠不能參與 json返回),其實Struts2為我們也提供一個更靈活的方法,在struts.xml的配置文件里,我們也是可以根據所需設置的,例如:

1 <param name="includeproperties">list/[/d+/]/.name</param>

includeProperties代表要包含的參數,值為正則表達式,因為返回的數據是一個list集合,名為list則 list[/d+].name(代表list下所有數組索引下的name屬性) 上文的反斜杠是轉義符號。(如果要返回模型驅動對象則是model[/d+])

下面是完整配置文件:

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4     "http://struts.apache.org/dtds/struts-2.3.dtd"> 5  6 <struts>     7         <constant name="struts.i18n.encoding" value="UTF-8"/> 8         <constant name="struts.devMode" value="true" /> 9         <package name="strutsjson" extends="json-default" namespace="/">10             <action name="test" class="com.lcw.struts.json.TestAction" method="test1">11                 <result name="success" type="json">12                     <param name="root">action</param>13                     <param name="includeproperties">14                         list/[/d+/]/.name15                     </param>16                 </result>17             </action>18         </package>19 </struts>

再看下此時的頁面數據返回:

這樣,我們想要的數據就可以篩選出來了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线观看一区| 国产视频精品免费播放| 国产精品日韩欧美| 欧美疯狂做受xxxx高潮| 亚洲全黄一级网站| 色综合亚洲精品激情狠狠| 国产精品99导航| 亚洲精品理论电影| 欧美视频二区36p| 九色91av视频| 亚洲精品国产精品国自产观看浪潮| 亚洲欧美一区二区三区四区| 亚洲欧美三级在线| 日韩欧美成人免费视频| 亚洲午夜久久久影院| 日韩亚洲欧美中文高清在线| 性欧美暴力猛交69hd| 久久99精品久久久久久噜噜| 国语自产精品视频在线看抢先版图片| 欧美性理论片在线观看片免费| 欧美激情在线观看| 欧美一区在线直播| 尤物精品国产第一福利三区| 91亚洲精品视频| 欧美日韩中文字幕综合视频| 色悠久久久久综合先锋影音下载| 亚洲毛片在线看| 中文字幕国产日韩| 97久久精品人人澡人人爽缅北| 欧美激情一区二区久久久| 高清亚洲成在人网站天堂| 91免费视频网站| 国内外成人免费激情在线视频网站| 日韩精品视频免费| 欧美日韩在线视频一区二区| 美女999久久久精品视频| 日韩精品在线看| 国产精品极品美女粉嫩高清在线| 国模精品视频一区二区| 欧美性xxxxxxx| 最近2019好看的中文字幕免费| 国内精品一区二区三区四区| 欧美激情精品在线| 欧美人与物videos| 国产专区欧美专区| 国产97在线|亚洲| 国产在线拍偷自揄拍精品| 亚洲xxxx妇黄裸体| 国产精品成人aaaaa网站| 日韩欧美成人区| 国产精品999| 亚洲高清久久久久久| 俺去了亚洲欧美日韩| 国产亚洲欧美日韩精品| 亚洲精品视频在线观看视频| yw.139尤物在线精品视频| 少妇高潮久久久久久潘金莲| 亚洲无线码在线一区观看| 欧美视频中文在线看| 欧美亚洲一级片| 欧美极品少妇与黑人| 欧美日韩亚洲一区二区三区| 色999日韩欧美国产| 亚洲美女www午夜| 亚洲最大福利视频| 亚洲欧美日韩精品久久| 精品美女国产在线| 伊人精品在线观看| 久久国产视频网站| 一区二区三区视频免费| 色哟哟入口国产精品| 日韩成人在线视频观看| 成人免费大片黄在线播放| 欧美资源在线观看| 97国产suv精品一区二区62| 亚洲成人1234| 在线播放国产一区二区三区| 日韩精品一区二区三区第95| 国产成人福利夜色影视| 成人午夜在线视频一区| 日韩二区三区在线| 午夜免费久久久久| 国产精品久久一区| 国产精品视频免费在线观看| 亚洲人成网站在线播| 久久久免费电影| 日韩专区在线播放| 欧美黄网免费在线观看| 91免费视频国产| 一本色道久久88综合日韩精品| 国产精品免费久久久久久| 国产精品入口尤物| 亚洲国产精品久久久| 国产精品久久久久久久久久三级| 38少妇精品导航| 欧美制服第一页| 影音先锋欧美在线资源| 亚洲欧美国产精品久久久久久久| 亚洲午夜国产成人av电影男同| 狠狠综合久久av一区二区小说| 亚洲国产精品悠悠久久琪琪| 久久久久久九九九| 日韩av在线最新| 国产精品三级美女白浆呻吟| 国产美女91呻吟求| 懂色av影视一区二区三区| 中文字幕欧美日韩在线| 欧美猛男性生活免费| 久久成人精品视频| 亚洲自拍小视频免费观看| 久久久久久91| 92福利视频午夜1000合集在线观看| 欧美性理论片在线观看片免费| 视频直播国产精品| 欧美日韩亚洲精品一区二区三区| 亚洲人成网7777777国产| 亚洲一品av免费观看| 美女性感视频久久久| 久久免费视频这里只有精品| 亚洲第一二三四五区| 精品久久久久久久久久| 国产福利精品视频| 国产69精品久久久久9999| 91啪国产在线| 上原亚衣av一区二区三区| 精品欧美一区二区三区| 国产精品美腿一区在线看| 米奇精品一区二区三区在线观看| 欧美午夜电影在线| 日韩av综合网| 国产成人精品午夜| 久久国产精品偷| 高清欧美一区二区三区| 久久久久久国产精品美女| 亚洲一区二区中文| 亚洲最大的成人网| 欧美怡春院一区二区三区| 国产精欧美一区二区三区| 91免费精品视频| 亚洲自拍偷拍第一页| 亚洲精品国精品久久99热一| 久久影院模特热| 亚洲精品成人久久| 国产精品手机播放| 国产精品毛片a∨一区二区三区|国| 久久福利网址导航| 欧美区在线播放| 欧美制服第一页| 午夜精品久久久久久久白皮肤| 日本道色综合久久影院| 国产精品久久久久久中文字| 久久中国妇女中文字幕| 国产91ⅴ在线精品免费观看| 青青草一区二区| 欧美在线影院在线视频| 国产欧美日韩视频| 久久综合免费视频影院| 久久99久久99精品免观看粉嫩| 久久人人爽人人爽人人片av高清| 久久成人综合视频| 日韩中文字幕视频| 最近2019年手机中文字幕| 国产在线播放91| 日韩精品免费观看|