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 表达式 源码
EL 表达式提供了简洁的语法来访问和操作数据,使得开发者可以更方便地在 JSP 中进行数据处理。 基本语法 EL 表达式的基本语法结构为 `${expression}`,其中 `expression` 是一个 EL 表达式。EL 提供了两种运算符来...
当用户提交表单后,Struts 2会使用OGNL解析这些表达式,将数据保存到对应的模型对象中,如`getUser().setUsername()`。而在显示用户信息时,同样可以通过OGNL表达式获取数据,如`getUser.getUsername()`。 **值堆栈...
在这个文档中,我们将深入探讨EL表达式,并通过与OGNL、JSTL和STRUTS2标签的对比,进一步理解其用法。 首先,让我们关注EL表达式的语法。EL表达式通常以`#{}`包围,它允许开发者以一种声明式的方式访问和操作Java...
在EL表达式中,实际上底层是使用了OGNL(Object-Graph Navigation Language)来处理对象导航和表达式的求值。OGNL是一种强大的表达式语言,可以用来获取或设置Java对象的属性,包括深层的对象属性和集合元素。例如,...
通过以上介绍,我们可以看到EL表达式在Java Web开发中的强大功能。它极大地提高了代码的可读性和维护性,使得视图层的逻辑更加清晰。了解并熟练掌握EL的使用,对于提升开发效率和代码质量具有重要意义。在实际项目中...
EL表达式通常在${}内编写,可以用来获取、设置值,或者进行基本的算术和逻辑操作。EL与JSP的脚本元素相比,更易读,更易于维护,减少了页面中的Java代码量。 【Session】 Session是Web应用程序中的一种会话管理机制...
深入了解struts1.x中的 struts - config.xml 弄清楚struts-config.xml中各项元素的作用,对于我们构建web项目有莫大的好处。<struts-config>是struts的根元素,它主要有8个子元素,DTD定义如下:
在ActionContext中可以获取到这个值栈的实例,并通过OGNL表达式对其进行操作。 Struts2还提供了与Servlet API的集成,比如StrutsRequestWrapper类。这是HttpServletRequest的一个包装类,它能够在获取属性值之前...
EL表达式通常在JSF组件的属性中使用,以便动态地获取或设置值。例如,`#{bean.property}` 这样的表达式会查找名为`bean`的JavaBean对象,并尝试访问其`property`属性。 EL具有以下主要特性: 1. **简化的对象访问**...
首先,EL表达式的基本语法是 `${expression}`,它允许开发者从请求、会话、应用范围或任何绑定到页面作用域的对象中检索值。例如,如果我们有一个名为`user`的对象,包含了用户的所有注册信息,那么我们可以通过以下...
在JSP页面中,可以直接通过EL表达式访问ValueStack中的对象属性,如`${foo}`表示获取栈中某个对象的"foo"属性。如果需要访问其他上下文中的对象,如ServletContext、HttpSession、HttpServletRequest的属性,就需要...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...
6. **异常处理**:在Struts2的拦截器中,可以使用OGNL处理异常,例如`<result type="tiles">error</result><exception-mapping exception="java.lang.Throwable" result="error" />`,当发生异常时,会跳转到错误...
为了使EL表达式能够访问`ValueStack`中的数据,Struts2在`HttpServletRequest`的基础上封装了一个类——`StrutsRequestWrapper`。这个类重写了`getAttribute_r`方法,使其能够在没有找到相应属性时,尝试从`...
ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,...
- 在JSP页面中使用Struts2标签和EL表达式展示或操作数据。 4. **实例应用**: - 假设有一个User对象,包含name和email属性,我们可以在Action类中创建User对象并填充属性。 - 在Action配置中,将User对象放入...