el为什么可以取到值栈里的数据
来源:互联网 发布:知名数据咨询公司 编辑:程序博客网 时间:2024/06/06 13:53
下面这个类会在 Struts2 初始化的时候,替换 HttpServletRequest,运行于整个 Struts2 的运行过程中,当我们试 图调用 request.getAttribute() 的时候,就会执行上面的这个方法。(这是一个典型的装饰器模式)在执行上面的方法时,会首先调用 HttpServletRequest 中原本的 request.getAttribute(),如果没有找到,它会继续到 ValueStack 中去查找, 而 action 在 ValueStack 中,所以 action 中的变量通过 OGNL 表达式,就能找到对应的值了
public class StrutsRequestWrapper extends HttpServletRequestWrapper { /** * The constructor * @param req The request */ public StrutsRequestWrapper(HttpServletRequest req) { super(req); } /** * Gets the object, looking in the value stack if not found * * @param s The attribute key */ public Object getAttribute(String s) { if (s != null && s.startsWith("javax.servlet")) { // don't bother with the standard javax.servlet attributes, we can short-circuit this // see WW-953 and the forums post linked in that issue for more info return super.getAttribute(s); } ActionContext ctx = ActionContext.getContext(); Object attribute = super.getAttribute(s); boolean alreadyIn = false; Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute"); if (b != null) { alreadyIn = b.booleanValue(); } // note: we don't let # come through or else a request for // #attr.foo or #request.foo could cause an endless loop if (!alreadyIn && attribute == null && s.indexOf("#") == -1) { try { // If not found, then try the ValueStack ctx.put("__requestWrapper.getAttribute", Boolean.TRUE); ValueStack stack = ctx.getValueStack(); if (stack != null) { attribute = stack.findValue(s); } } finally { ctx.put("__requestWrapper.getAttribute", Boolean.FALSE); } } return attribute; }}
在 Webwork2.1.X 的年代,我们会编写一个拦截器来做这个事情的。大致的原理是:在 Action 执行完返回之前,依次读取 Action 中的所有的变 量,并依次调用 request.setAttribute() 来进行设置。具体的整合方式,请参考以下这篇文档:http://wiki.opensymphony.com/display/WW/Using+WebWork+and+XWork+with+JSP+2.0+and+JSTL+1.1
转自 Silence_Mind:http://blog.csdn.net/marvel__dead/article/details/59719103
阅读全文
0 0
- el为什么可以取到值栈里的数据
- EL表达式为什么可以在值栈中取值
- Struts2为什么可以用EL表达式取值?
- php 数据库可以查到数据的sql语句,在代码里为什么查不到数据
- 为什么背包问题是可以的?
- 黑马总结:el表达式${user.address.contact.mobileTelephone}为什么可以实现输出属性值
- struts2中为什么可以用EL表达式取出valuestack中的值
- struts2 request内幕 为什么在struts2用EL表达式可以取值
- struts2 request内幕 为什么在struts2用EL表达式可以取值
- Java后台框架篇--EL表达式为什么可以取到struts值栈中的值
- 为什么可以把未提交的数据写入数据文件?——通过DML操作举例解析
- tp5:为什么find()出来的数据有时候可以用toArray() 有时候会报错?
- 安卓手机可以用“它”来恢复误删的数据,为什么iPhone不可以
- 让iframe也可以编辑 el与node的区别
- 为什么EL表达式能访问struts2的值栈
- 为什么el中能访问action的属性
- EL 表达式的用法(一)--获取数据
- jsp中为什么后台传递过来的数据没有空格 而jsp页面上用EL表达式接收就会显示有空格
- python3.6使用 urllib完成下载
- select2选中第一项无法显示问题
- Linux基本操作、命令
- 常用正则表达式
- 不同浏览器私有属性
- el为什么可以取到值栈里的数据
- hdu 1421 搬寝室【动态规划】
- mongodb 时间类型 date 时间戳等
- 用命令的方式向ftp服务器上传文件
- Oracle触发器实现插入或更新一张表数据同时插入或更新另一张表
- 【6】Python 标准库基础
- E
- mybatis like
- 不要迷信python