Struts2中EL表达式的取值范围问题
在Struts2中对request进行了装饰,增强了getAttribute()方法,改变了EL该方法的查找范围,具体为,查找request域,不存在,查找值栈,不存在,查找ContextMap,还是不存在,则返回null。
因为${对象名},会使用findAttribute的查找,其顺序是page域->request域->session域->application域原理如下:

public class PageContext{//在page域中根据name获取valuepublic Object getAttribute(String name){return "找到了返回对象" | "没找到返回null";}//从四个域中逐个搜索,只要在其中一个找到,就不再继续寻找public Object findAttribute(String name){Object value = null;//搜page域value = this.getAttribute(name);if(value != null){return value;}//搜request域value = this.getRequest().getAttribute(name);if(value != null){return value;}//搜session域value = this.getSession().getAttribute(name);if(value != null){return value;}//搜application域value = this.getServletContext().getAttribute(name);if(value != null){return value;}return value;}
}
PS:由上述原因,Struts2对request进行了装饰,那么访问顺序变为page域->request域->值栈->ContextMap->session->application。

如果还想深究源码,可以参考ServletConfigInterceptor拦截器
public class ServletConfigInterceptor extends AbstractInterceptor implements StrutsStatics {private static final long serialVersionUID = 605261777858676638L;public String intercept(ActionInvocation invocation) throws Exception {final Object action = invocation.getAction();final ActionContext context = invocation.getInvocationContext();if (action instanceof ServletRequestAware) {HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);((ServletRequestAware) action).setServletRequest(request);}if (action instanceof ServletResponseAware) {HttpServletResponse response = (HttpServletResponse) context.get(HTTP_RESPONSE);((ServletResponseAware) action).setServletResponse(response);}if (action instanceof ParameterAware) {((ParameterAware) action).setParameters((Map)context.getParameters());}if (action instanceof ApplicationAware) {((ApplicationAware) action).setApplication(context.getApplication());}if (action instanceof SessionAware) {((SessionAware) action).setSession(context.getSession());}if (action instanceof RequestAware) {((RequestAware) action).setRequest((Map) context.get("request"));}if (action instanceof PrincipalAware) {HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);if(request != null) {// We are in servtlet environment, so principal information resides in HttpServletRequest((PrincipalAware) action).setPrincipalProxy(new ServletPrincipalProxy(request));}}if (action instanceof ServletContextAware) {ServletContext servletContext = (ServletContext) context.get(SERVLET_CONTEXT);((ServletContextAware) action).setServletContext(servletContext);}return invocation.invoke();}
}

Struts2中EL表达式的取值范围问题相关推荐

  1. Struts2中EL表达式取值

    http://blog.csdn.net/cuihaiyang/article/details/41950141 (写的不错,可以知道为什么struts2可以用El取属性值的问题.正常el从reque ...

  2. el表达式动态取值中括号内两点_中考热点:旧瓶新酒,解题新策略分析之玩转动态型热点题型...

    动态型试题一般是指以几何知识和图形为背景,渗透运动变化观点的一类试题,常见的运动对象有点动.线动.图动:其运动形式有平动.旋转.翻折.滚动等.动态型试题其特点是集几何.代数知识于一体,数形结合,有较强 ...

  3. JSP 中EL表达式用法详解

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  4. html获取contextpath,JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JSP里取${pageContext.request.contextPath},方式一是可以正常取到,但方式二却取到的是 字符"${pageContext.request.contextP ...

  5. el表达式ne什么意思_JSP中EL表达式的用法详解(必看篇)

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  6. mysql栏的范围外值,MySQL中各种字段的取值范围-数据库专栏,MySQL

    mysql中各种字段的取值范围过节回来,网站更新的第一篇文章. 看来我有必要在最近找到一位志同道合的同学一起来维护站点才行了----------------------tinyint -128 – 1 ...

  7. java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...

    先看一段推理 +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +12 ...

  8. numpy中方法参数axis取值理解

    numpy中方法参数axis取值理解 首先不要使用什么横纵轴去理解,因为时间长了就忘记了,而且如果a是一个三维数组就没法解释了. axis等于0时,在shape中表示的是二维数组.那么np.amin( ...

  9. python中bool函数用法_在python中bool函数的取值方法

    bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. 1.当对数字使用bool函数时,0返回假(False),任何其 ...

最新文章

  1. 人脑启发AI设计:让神经网络统一翻译语音和文本
  2. 神经网络(补充)(第五章)
  3. 多层装饰器、带参数装饰器
  4. 嵌套页面h5怎么调起手机文件_让微信公众号文章排版像网页h5一样高大上
  5. Druid monitor中数据源只显示() property for user to setup(已解决)
  6. springboot 注解_springBoot注解大全
  7. [Stage3D]入门讲稿
  8. PHP 生成 ppt,php在线编辑器fckedìtor应用.ppt
  9. 小米平板2刷哪个系统更流畅_两个系统随你选 小米平板2刷机教程
  10. 无法连接GitHub完整解决方案
  11. php汉字存储容量大小,存储400个24*24点阵汉字字形所需的存储容量是多少
  12. linux下自动删除文件夹,如何在Linux中自动删除或清理/tmp文件夹内容?
  13. mocha-only和skip的用法
  14. [雪浪小镇启动仪式]阿里王坚:没有制造业的互联网没有未来?
  15. 双网卡同网段静态路由_WINDOWS系统下双网卡设置路由 本文主要涉及到静态路由...
  16. Java 以任意数量空格分割字符串方式
  17. 基于启发式算法与单目优化和马尔科夫模型的进出口公司的货物装运策略——整数线性规划 随机模拟
  18. 艾美捷游离维多珠单抗ADA水平检测试剂盒,高灵敏度检测
  19. php仿u8系统模板_中文分词源码_7urpu8 采用php的源码实现 - 下载 - 搜珍网
  20. PS2游戏机硬盘启动制作教程

热门文章

  1. C#设计模式学习笔记:(20)职责链模式
  2. 爬虫究竟是合法还是违法的?
  3. C#LeetCode刷题之#453-最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements)
  4. 印度软件开发人员_我如何辍学并在19岁时在印度找到了一份开发人员的工作
  5. termux怎么生成木马_一个木马病毒是如何诞生的?
  6. ubuntu pycharm设置快捷图标_这些Ubuntu中的小技巧,你知道吗?
  7. 面试问题:SpringMVC的执行流程
  8. 推荐一条高效的Python爬虫学习路径!
  9. 正则表达式---------常用字符及其功能
  10. 8月23号刚刚发布的 Flink 1.9 到底优化了哪些功能?