2013第10周六项目中用到的前端技术学习1

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效率也相对低些。

原文地址:https://www.cnblogs.com/doit8791/p/2951983.html