为什么EL表达式能访问struts2的值栈
2015-12-17 14:47
423 查看
为什么EL表达式能访问struts2的值栈
简单地说,struts2对默认的request进行了包装,默认会先从原request里面找,如果找不到,会从值栈里面找;
具体实现细节:
总结一下答案:
①JSTL能访问Action中通过request.setAttribute("")设置的值。这是大家所熟悉的。
②JSTL能访问Action中属性(通过getXXX方法实现访问)。
因为ValueStack存在于request,所以用${tip}访问时的顺序是:request先访问ValueStack,ValueStack从中找出tip对应的值
简单地说,struts2对默认的request进行了包装,默认会先从原request里面找,如果找不到,会从值栈里面找;
具体实现细节:
public class StrutsRequestWrapper extends HttpServletRequestWrapper { public StrutsRequestWrapper(HttpServletRequest req) { super(req); } public Object getAttribute(String s) { ...... ActionContext ctx = ActionContext.getContext(); Object attribute = super.getAttribute(s);//先从request范围获取属性值 if (ctx != null) { if (attribute == null) {//如果从request范围没有找到属性值,即从ValueStack中查找对象的属性值 ...... ValueStack stack = ctx.getValueStack(); attribute = stack.findValue(s); ...... } } return attribute; } }
总结一下答案:
①JSTL能访问Action中通过request.setAttribute("")设置的值。这是大家所熟悉的。
②JSTL能访问Action中属性(通过getXXX方法实现访问)。
因为ValueStack存在于request,所以用${tip}访问时的顺序是:request先访问ValueStack,ValueStack从中找出tip对应的值
相关文章推荐
- Java基础学习总结(39)——Log4j 1使用教程
- Java基础学习总结(39)——Log4j 1使用教程
- Java基础学习总结(39)——Log4j 1使用教程
- 非web环境,maven+spring+mybatis配置,备忘
- java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl
- Java Netty简介
- spring三层示例controller层,service层示例,dao层示例
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- Spring MVC常用注解说明
- Java多线程实现异步调用
- struts.xml中result的学习
- Java线程安全和非线程安全
- spring在web.xml中的配置示例
- SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程
- java中常见的异常(转)
- Spring学习总结(2)——Spring的常用注解
- Spring学习总结(2)——Spring的常用注解
- Spring学习总结(2)——Spring的常用注解