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

1.首先struts2为我们定义了几个可以在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";
复制代码
这里定义了我们常用的${base}、${stack}等。
注意:这里面定义都是对应的类。例如stack对应的就是ValueStack,所以我们在页面可以使用
${stack.findValue('@com.Blog@PERMIT_COMMENT_BY_NONE')}.这就是方法问ValueStack的findValue方法。我们还可以使用
${request}来使用HttpServletRequest类,(只能)然后调用里面的方法。例如${request.getAttribute("aaa")}等。

2.通过使用struts2我们知道,页面传递过来的值都是保存在ActionContext中的值栈里面的,其中这个值栈是ActionContext 的根,因此可以不用加“#”访问。而在ActionContext中还封存了其他的东西,比如request,session、parameters 等。。但是一定要注意。这里的request、session、parameters等不是HttpServletRequest那些类,而是一个 map。而且进行了重新组装,例如request封装了 ServletActionContext.getRequest().setAttribute("aaa", "bbb");信息
我们通过Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot())就可以取到值。当然request这个map中还有一些其他的东西,例如我的打印结果是;
System.out.println(Ognl.getValue("#request", context.getContextMap(),new Object()));通过打印可以看出来
这些可以参考
http://hi.baidu.com/maml897/blog/item/e6d962c3d55e6338e5dd3bb0.html。

3.我们知道 ftl页面 ${}写的都是 ognl表达式,而且都是 根里面的 ,所以不用加上“#”,但是 要访问ActionContext里面,不是根的request怎么办呢?
我是这样用的 ${#request}发现时错误的,后来查找资料发现
使用
${Request["a"]}
${RequestParameters["a"]}
${Session ["a"]}
${Application  ["a"]}
或者${Application.myApplicationAttribute}
${Session.mySessionAttribute}
${Request.myRequestAttribute}
${Parameters.myParameter}
千万要注意的是
Application、Session、Request、Parameters都是map。都是大写的,没有写成${#request}这个我也不知道为什么,
在页面 用了大写。
可以参考freemarker.ext.servlet.FreemarkerServlet
在action里使用
System.out.println(Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot()));

刚才发现 在jsp页面里访问 actionContext的内容
${request}
这样写 是访问actionContext的request,而不是 struts2内定的
用struts2标签
<x:property value="#request.toString()"/>
就要加"#"

posted on 2012-06-08 18:58 youngturk 阅读(1540) 评论(0)  编辑  收藏 所属分类: freemark


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜