Struts2+Freemarker+Ognl中解析request請求的方法

          1.首先struts2為我們定義了幾個(gè)可以在ftl中使用的變量,都放在了org.apache.struts2.views.util.ContextUtil里面,具體怎么做的,還沒有看。
          1. public static final String REQUEST = "request";

          2. public static final String REQUEST2 = "request";

          3. public static final String RESPONSE = "response";

          4. public static final String RESPONSE2 = "response";

          5. public static final String SESSION = "session";

          6. public static final String BASE = "base";

          7. public static final String STACK = "stack";

          8. public static final String OGNL = "ognl";

          9. public static final String STRUTS = "struts";

          10. public static final String ACTION = "action";
          復(fù)制代碼
          這里定義了我們常用的${base}、${stack}等。
          注意:這里面定義都是對應(yīng)的類。例如stack對應(yīng)的就是ValueStack,所以我們在頁面可以使用
          ${stack.findValue('@com.Blog@PERMIT_COMMENT_BY_NONE')}.這就是方法問ValueStack的findValue方法。我們還可以使用
          ${request}來使用HttpServletRequest類,(只能)然后調(diào)用里面的方法。例如${request.getAttribute("aaa")}等。

          2.通過使用struts2我們知道,頁面?zhèn)鬟f過來的值都是保存在ActionContext中的值棧里面的,其中這個(gè)值棧是ActionContext 的根,因此可以不用加“#”訪問。而在ActionContext中還封存了其他的東西,比如request,session、parameters 等。。但是一定要注意。這里的request、session、parameters等不是HttpServletRequest那些類,而是一個(gè) map。而且進(jìn)行了重新組裝,例如request封裝了 ServletActionContext.getRequest().setAttribute("aaa", "bbb");信息
          我們通過Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot())就可以取到值。當(dāng)然request這個(gè)map中還有一些其他的東西,例如我的打印結(jié)果是;
          System.out.println(Ognl.getValue("#request", context.getContextMap(),new Object()));通過打印可以看出來
          這些可以參考
          http://hi.baidu.com/maml897/blog/item/e6d962c3d55e6338e5dd3bb0.html。

          3.我們知道 ftl頁面 ${}寫的都是 ognl表達(dá)式,而且都是 根里面的 ,所以不用加上“#”,但是 要訪問ActionContext里面,不是根的request怎么辦呢?
          我是這樣用的 ${#request}發(fā)現(xiàn)時(shí)錯(cuò)誤的,后來查找資料發(fā)現(xiàn)
          使用
          ${Request["a"]}
          ${RequestParameters["a"]}
          ${Session ["a"]}
          ${Application  ["a"]}
          或者${Application.myApplicationAttribute}
          ${Session.mySessionAttribute}
          ${Request.myRequestAttribute}
          ${Parameters.myParameter}
          千萬要注意的是
          Application、Session、Request、Parameters都是map。都是大寫的,沒有寫成${#request}這個(gè)我也不知道為什么,
          在頁面 用了大寫。
          可以參考freemarker.ext.servlet.FreemarkerServlet
          在action里使用
          System.out.println(Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot()));

          剛才發(fā)現(xiàn) 在jsp頁面里訪問 actionContext的內(nèi)容
          ${request}
          這樣寫 是訪問actionContext的request,而不是 struts2內(nèi)定的
          用struts2標(biāo)簽
          <x:property value="#request.toString()"/>
          就要加"#"

          posted on 2012-06-08 18:58 youngturk 閱讀(1548) 評(píng)論(0)  編輯  收藏 所屬分類: freemark

          <2012年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 丹棱县| 周至县| 陵水| 合山市| 邓州市| 黄山市| 皋兰县| 榆社县| 百色市| 安福县| 东阿县| 孝义市| 吉林市| 怀宁县| 凌海市| 德化县| 东阳市| 阜新市| 镇宁| 张家界市| 浪卡子县| 浠水县| 彭泽县| 新营市| 正安县| 谷城县| 淮阳县| 冀州市| 尼木县| 白城市| 金昌市| 南靖县| 琼海市| 乐东| 泗洪县| 罗山县| 中江县| 安龙县| 舟曲县| 景宁| 清水河县|