在struts.xml 中使用ognl有两种方面的需求:
1. 在action执行时从struts.xml中读取param标签中的值,然后调用标签name属性相应的set方法对action中的变量赋值。
2. 在action执行完execute(或其他方法)后,struts.xml通过param变量读取action中或其他对象(例如request,session等)的属性值并执行一些计算。
在这两种情况先如果使用ognl表达式应该如何使用:
1. 在struts.xml 的action标签下可以定义<param name = "name"></param>标签,在action执行属性赋值的的时候会自动读取该action对应标签下的param标签,并根据相应的name值调用setName()方法为action属性赋值。但是如果想在该处使用ognl标签,例如我想在该处定义一个变量存储项目的根目录,并在action执行set方法时对属性赋值时将该变量设置进action。理应这样写:
<param name = "rootPath">${#request.contextPath}</param>,然后期望着action会执行相应的setRootPath()方法对action的属性rootPath赋值(解析过后的)。但是在action执行setRootPath()方法时得到的总是原生的字符串,并不会执行解析。这是为什么?
2. 当action执行完,并想根据strut.xml 中result的配置跳转时,如果我想在result跳转的页面字符串上使用ognl,我可以这样写: <result name = "success">/${toward}.jsp</result>当然这个toward是action中的一个属性,已经在execute方法中赋了相应的值。在该处ognl表达式可以正常解析,并且如果我将${toward} 换成 ${#request.contextPath}也可以正常获取到该request属性的值。
那么问题来了~~
这个ognl什么时候能够正常解析,什么时候无法解析?
这个ognl能不能获取我认为有两个方面的因素:
1. struts框架的强制规定: 在action执行完之前不会解析ognl,在action执行之后会解析ognl

2. valueStack在整个action访问过程中的状态是怎样变化的,什么时间向其中放入了什么对象

我想弄明白怎么或者说能不能在action执行属性赋值或者在执行execute方法(也可以是其他方法)时获取struts.xml中配置的带ognl表达式的参数(上面说的需求1)?

还有就是这其中的原理

在strut.xml 中使用ognl的更多相关文章

  1. struts2 拦截器的注册在strut.xml中

    根据需要:需要在struts.xml中注册拦截器为以下内容  根据自己的业务需要更改参数 <!DOCTYPE struts PUBLIC "-//Apache Software Fou ...

  2. 浅析Struts2中的OGNL和ValueStack

    要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1.  ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action ...

  3. Mybatis配置文件SqlMapConfig.xml中的标签

    SqlMapConfig.xml配置文件中的属性 1 配置内容 properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器 ...

  4. mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例

    public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private ...

  5. 配置文件Struts.xml 中type属性 redirect,redirectAction,chain的区别

    1.redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失.  2.redirectAction:action处理完后重定向到一 ...

  6. 转载:MyBatis mapper.xml中使用静态常量或者静态方法

    转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...

  7. MyBatis中的OGNL教程

    MyBatis中的OGNL教程 有些人可能不知道MyBatis中使用了OGNL,有些人知道用到了OGNL却不知道在MyBatis中如何使用,本文就是讲如何在MyBatis中使用OGNL. 如果我们搜索 ...

  8. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...

  9. web.xml中load-on-startup的作用

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

随机推荐

  1. PHP入门 - - 05-->编写HTML页面的常用标签

    一.文字版面的编辑 1.格式标签 格式标签用于定义网页中文本的布局.缩进.位置.换行.列表等          <br>           换行          <p>   ...

  2. js 获取浏览器高度和宽度值(多浏览器)

    IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...

  3. dotnet core 初试两个小问题解决

    1. Setup has detected that visual studio 2015 update 3 may not be completely installed 在安装 DotNetCor ...

  4. Redis执行Lua脚本示例

    Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...

  5. ReSharper 配置及用法(二)

    下载工具 一:Reshaper是什么 即便是那些整天攻击 .NET 和 C# 的人,也常常不得不承认 Visual Studio 确实是个够强大的 IDE,除非他认为更少的 IDE 功能和命令行调试才 ...

  6. linux ubuntu的root密码

    安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...

  7. js定时相关函数:

    定时相关函数: mytime= setTimeout(vCode, iMilliSeconds [, sLanguage]) -- 单次定时执行指定函数 clearTimeout(iTimeoutID ...

  8. [转]Maven实现直接部署Web项目到Tomcat7

    From:http://my.oschina.net/angel243/blog/178554 http://yuandingjiema.iteye.com/blog/1752544 以前在项目中很少 ...

  9. gulp + webpack 构建多页面前端项目

    修改增加了demo地址 gulp-webpack-demo 之前在使用gulp和webpack对项目进行构建的时候遇到了一些问题,最终算是搭建了一套比较完整的解决方案,接下来这篇文章以一个实际项目为例 ...

  10. BZOJ 2957 & 线段树上的查询

    题意: 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个二 ...