jsp里面有个很像EL表达式的# ,是啥表达式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp里面有个很像EL表达式的# ,是啥表达式?相关的知识,希望对你有一定的参考价值。
jsp里面有个很像EL表达式的# ,是什么表达式?
请说下使用方法,谢谢^^
OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。
“#”符号有三种用途:
(1)、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
parameters
包含当前HTTP请求参数的Map
#parameters.id[0]作用相当于request.getParameter("id")
request
包含当前HttpServletRequest的属性(attribute)的Map
#request.userName相当于request.getAttribute("userName")
session
包含当前HttpSession的属性(attribute)的Map
#session.userName相当于session.getAttribute("userName")
application
包含当前应用的ServletContext的属性(attribute)的Map
#application.userName相当于application.getAttribute("userName")
注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。用于过滤和投影(projecting)集合,如books.?#this.price<100;构造Map,如#'foo1':'bar1', 'foo2':'bar2'。
(2)、用于过滤和投影(projecting)集合,如: books.?#this.price>35
books.?#this.price>35
(3)、构造Map,如: #'foo1':'bar1', 'foo2':'bar2'
#'foo1':'bar1', 'foo2':'bar2'这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:
<s:property value="#myMap['foo1']"/>
<s:property value="#myMap['foo1']"/>
楼主具体请看参考资料:
参考资料:http://jlins.javaeye.com/blog/567954
参考技术A jsf里面的标签和el差不多的 参考技术B OGNL表达式
构造Map,如#'foo1':'bar1', 'foo2':'bar2'。
支持容器的构造的表达式:
例如:"green", "red", "blue"构造一个List,#"key1" : "value1", "key2" : "value2", "key3" : "value3"构造一个Map
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 参考技术C 是不是struts的标签啊?
解决jsp无法用el表达式的问题
在写springMVC的项目时,用jsp去前端展示数据,期间遇到了一个问题就是无法用el表达式。
最后排除一切之后发现是因为自己maven项目里web.xml的版本问题。
我的maven项目web.xml版本用的是2.3版本的,如果web.xml是2.3版本的话,jsp里面有个默认的属性是:
<%@ page isELIgnored="true"%>
如果这个属性设置为true的话,默认el表达式是关闭的,所以我们可以在.jsp文件里面加入如下代码:
<%@ page isELIgnored="false"%>
如果是一两个jsp文件,我们这样改可能没什么,如果是太多jsp文件的话,这样子改就未必太麻烦了,如果我们想用一劳永逸的方法的话,最好是去修改xml的版本问题:
我们可以把web.xml的版本换成3.0的,这样子是默认支持el表达式的,我们就不需要再去修改jsp文件了。
以上是关于jsp里面有个很像EL表达式的# ,是啥表达式?的主要内容,如果未能解决你的问题,请参考以下文章