EL表达式为啥可以获取ActionContext类维护的map中的数据

居然还有人问这个框架,我仿佛穿越了,这框架的HelloWorld我都不会写了。
花了好大劲到处抄才把HelloWorld弄出来(其实几分钟就抄好了,手动滑稽)
【EL表达式为啥可以获取ActionContext类维护的map中的数据】 代码很简单
EL表达式为啥可以获取ActionContext类维护的map中的数据

我用的这个版本是Struts2.3.24,我之前用的时候是这个,然后在电脑里面保存了一份,所以我就直接用了,不知道新版长什么样,也不知道题主用的版本。。。。
ActionContext.getContext()是什么东西?就是ActionContext自己嘛,它放在ThreadLocal里面的
ActionContext.getContext().put("a", "A");是在干什么?EL表达式为啥可以获取ActionContext类维护的map中的数据

EL表达式为啥可以获取ActionContext类维护的map中的数据

这个ActionContext里面有一个名叫context的Map对象,其实是放在这里面了对吧,这个Map其实是一个OgnlContext的实例
EL表达式为啥可以获取ActionContext类维护的map中的数据

记住后面是5077.
EL表达式为啥可以获取ActionContext类维护的map中的数据

啊,没错,这个OgnlContext实现了Map接口。
org.apache.struts2.dispatcher.StrutsRequestWrapper 类Struts2用这个把HttpServletRequest包装了一把,它的getAttribute()方法有下面这一段
EL表达式为啥可以获取ActionContext类维护的map中的数据

看见没有,这一行attribute=stack.findValue(key),stack是什么?值栈啊。值栈的默认实现是com.opensymphony.xwork2.ognl.OgnlValueStack,所以要去看看它的findValue方法啰。好多个findValue在那调来调去的,我就不贴了,总之它会调用下面这个方法
EL表达式为啥可以获取ActionContext类维护的map中的数据

EL表达式为啥可以获取ActionContext类维护的map中的数据

嘿嘿嘿,你猜这个getContext()是个什么鬼:
EL表达式为啥可以获取ActionContext类维护的map中的数据

看见没,5077.
完啦。

■网友
对对对,Struts2最low,er都高贵地用SpringMVC
■网友
你在挖坟麽。struts2+jsp。。。


    推荐阅读