OGNL表达相当于JSP+Servlet模式中JSTL的地位,但是它的功能要比JSTL强大,在学习OGNL表达式时,你需要忘掉JSTL.
OGNL能够访问系统中OgnlContext中的对象, OgnlContext对象是OGNL表达式的下上文对象,即所有通过OGNL表达式取出的数据都是从上下文对象取出来的, OGNL的上下文环境是一个Map结构,称之为OgnlContext。
OgnlContext中包括以下几个内置对象
ValueStack:
存放在OgnlContext的第一位,是根对象,访问这里面的内容有点特殊,不用指定范围, Struts2框架总是把Action实例放在栈顶。因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略"#"标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。
request:
模拟了HttpServletRequest对象,取这里面的值就相当于调用了request.getAttribute("key"),访问这里面的属性形式: #request['user']或#request.user
session:
模拟了HttpServletSession对象,取这里面的值就相当于调用了session.getAttribute("key"),
访问这里面的属性形式: #session['user']或#session.user
application:
模拟了HttpServletApplication对象,取这里面的值就相当于调用了servletContext.getAttribute("key"),访问这里面的属性形式: #application['user']或#application.user
attr:
如果PageContext可用,则访问PageContext,否则依次搜索request、session和application对象。访问形式: #attr['user']或#attr.user
parameters:
用于访问请求参数,相当于调用了HttpServletRequest对象的getParameter()方法。也相当于JSTL中的 ${ param.id },访问形式: :#parameters['id']或#parameters.id
记住一点,不要和EL表达式混用,如果你用了EL表达式,就全用EL表达式,如果用了OGNL,就全用OGNL.
2012-11-30 14:04
【SSH学习3】- struts2 标签里面不能使用el表达式可以使用ongl表达式 .
struts2 标签里面不能使用el表达式只可以使用ongl表达式
使用el表达式的话出错误的
According to TLD or attribute directive in tag file, attribute disabled does not accept any expressions
如
<s:select list="tmpList" name="${eleName}"></s:select>
提示错误信息:According to TLD or attribute directive in tag file, attribute disabled does not accept any expressions
但是可以使用ongl表达式
把$修改为%即可
<s:select list="tmpList" name="%{eleName}"></s:select>
这样就可以了
${}EL表达式可以直接输出内容,但是ONGL不行,它是与STRUTS
的标签相结合使用的
想弄明白ONGL和EL相关标签及原理
2013年3月9日21:17:17晚上准备回去,上面是转载的文章;基本上明白了el和ongl的区别;jsp2.0支持的el就是为了简化相关对象的编写;后来structs2支持了更加强大的ongl,但ongl效率也相对低些。