`
y806839048
  • 浏览: 1126068 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

el表达式为什么可以取到struts值栈中的值

阅读更多

 

el表达式为什么可以取到struts值栈中的值

 

1,el表达式自身就是会从request,session,application,pagecontext获取

 

 

2,由于在StrutsPrepareAndExecuteFilter中包装了request( request = prepare.wrapRequest(request);)StrutsRequestWrapper,

这个request又重写了getAttribute方法:

 

这个方法实现了从原来的requset,session等获取,然后获取不到再从值栈获取

 

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);

        if (ctx != null) {

            if (attribute == null) {

                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 && 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;

    }

 

分享到:
评论

相关推荐

    struts jstl el表达式示例代码

    struts jstl el表达式示例代码 struts jstl el 表达式 源码

    el表达式教程,教你学会使用el表达式

    EL 表达式提供了简洁的语法来访问和操作数据,使得开发者可以更方便地在 JSP 中进行数据处理。 基本语法 EL 表达式的基本语法结构为 `${expression}`,其中 `expression` 是一个 EL 表达式。EL 提供了两种运算符来...

    表达式与言EL和OGNL

    当用户提交表单后,Struts 2会使用OGNL解析这些表达式,将数据保存到对应的模型对象中,如`getUser().setUsername()`。而在显示用户信息时,同样可以通过OGNL表达式获取数据,如`getUser.getUsername()`。 **值堆栈...

    【温故而知新】一个极好极全极简明的EL表达式的学习文档

    在这个文档中,我们将深入探讨EL表达式,并通过与OGNL、JSTL和STRUTS2标签的对比,进一步理解其用法。 首先,让我们关注EL表达式的语法。EL表达式通常以`#{}`包围,它允许开发者以一种声明式的方式访问和操作Java...

    s:iterator的EL表达式原理

    在EL表达式中,实际上底层是使用了OGNL(Object-Graph Navigation Language)来处理对象导航和表达式的求值。OGNL是一种强大的表达式语言,可以用来获取或设置Java对象的属性,包括深层的对象属性和集合元素。例如,...

    el表达式的使用全集

    通过以上介绍,我们可以看到EL表达式在Java Web开发中的强大功能。它极大地提高了代码的可读性和维护性,使得视图层的逻辑更加清晰。了解并熟练掌握EL的使用,对于提升开发效率和代码质量具有重要意义。在实际项目中...

    jsp,struts,EL,session等注意总结集合

    EL表达式通常在${}内编写,可以用来获取、设置值,或者进行基本的算术和逻辑操作。EL与JSP的脚本元素相比,更易读,更易于维护,减少了页面中的Java代码量。 【Session】 Session是Web应用程序中的一种会话管理机制...

    学会EL表达式各种语法

    深入了解struts1.x中的 struts - config.xml 弄清楚struts-config.xml中各项元素的作用,对于我们构建web项目有莫大的好处。<struts-config>是struts的根元素,它主要有8个子元素,DTD定义如下:

    struts2标签和OGNL表达式.pdf

    在ActionContext中可以获取到这个值栈的实例,并通过OGNL表达式对其进行操作。 Struts2还提供了与Servlet API的集成,比如StrutsRequestWrapper类。这是HttpServletRequest的一个包装类,它能够在获取属性值之前...

    el和ongl表达式学习

    EL表达式通常在JSF组件的属性中使用,以便动态地获取或设置值。例如,`#{bean.property}` 这样的表达式会查找名为`bean`的JavaBean对象,并尝试访问其`property`属性。 EL具有以下主要特性: 1. **简化的对象访问**...

    实现通过EL获取用户的注册信息

    首先,EL表达式的基本语法是 `${expression}`,它允许开发者从请求、会话、应用范围或任何绑定到页面作用域的对象中检索值。例如,如果我们有一个名为`user`的对象,包含了用户的所有注册信息,那么我们可以通过以下...

    struts2标签和OGNL表达式

    在JSP页面中,可以直接通过EL表达式访问ValueStack中的对象属性,如`${foo}`表示获取栈中某个对象的"foo"属性。如果需要访问其他上下文中的对象,如ServletContext、HttpSession、HttpServletRequest的属性,就需要...

    Struts2 如何使用OGNL表达式(三十八)

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...

    struts2-OGNL表达式测试

    6. **异常处理**:在Struts2的拦截器中,可以使用OGNL处理异常,例如`<result type="tiles">error</result><exception-mapping exception="java.lang.Throwable" result="error" />`,当发生异常时,会跳转到错误...

    ognl表达式 ognl表达式

    为了使EL表达式能够访问`ValueStack`中的数据,Struts2在`HttpServletRequest`的基础上封装了一个类——`StrutsRequestWrapper`。这个类重写了`getAttribute_r`方法,使其能够在没有找到相应属性时,尝试从`...

    Struts2核心包

    ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,...

    struts2标签使用方法

    - 在JSP页面中使用Struts2标签和EL表达式展示或操作数据。 4. **实例应用**: - 假设有一个User对象,包含name和email属性,我们可以在Action类中创建User对象并填充属性。 - 在Action配置中,将User对象放入...

Global site tag (gtag.js) - Google Analytics