Ognl表达式注意事项
OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。其中$广泛应用于EL中。
“#”符号有三种用途:
(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")
|
(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']"/>
“%”符号的用途
“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。
“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval()功能,例如 :
var oDiv = eval("document.all.div"+index)
var oDiv = eval("document.all.div"+index)
当index变量为1时,语句就会被当作var oDiv = document.all.div1 var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']" />
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']"/>
上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"这么一个字符串。 如果将第3行改写成这样:
<s:url value="%{#myMap['key1']}"/>
<s:url value="%{#myMap['key1']}"/>
则输出为“value1”。
这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”(通常这些标签的值是被默认按字面值处理,如value属性的值)类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。
“$”有两种用途
(1)、在国际化资源文件中,引用OGNL表达式。
(2)、在Struts 2配置文件中,引用OGNL表达式:
<action name="saveUser" class="userAction" method="save">
<result type="redirect">listUser.action?msg=${msg}</result>
</action>
<action name="saveUser" class="userAction" method="save">
<result type="redirect">listUser.action?msg=${msg}</result>
</action>
"$"的EL表达式注意事项。
注意:不推荐使用EL表达式,因为已经有ognl表达式的强大功能了。
EL表达式不能用于用于struts2标签中。如<s:property value="${some}"/>
这样会报错。
EL表达式也可以结合循环标签使用。如:
<s:iterator value="signs">
<s:property value="signDate"/>
${signDate}
</s:iterator >
第二行于第三行效果相同。
最后重申:struts2后续版本对于EL的适应还是未知,故不推荐使用EL
Struts2的session超时处理
这里采用strtus2的拦截器实现。
Struts2与json
Struts2有json插件,我个人不喜欢使用。故采用json-lib包。
使用json-lib时要返回json数据只需要在action方法内return null 就可以了。这种做法是以往struts2中保留下来的。也可以采用void 方法
Struts2-jQuery
Struts2的jquery插件,主要提供ajax功能,也可以使用jquery-ui。
官网上有详细的例子提供下载,足够学习了。
Struts2-Spring
Struts2与spring集成时,受管理的action的作用于需要特别处理为request。
并且要在web中配置两个spring的监听器,第一个是必须的,第二个是:当使用了Spring's DispatcherServlet以外的Servlet 2.4及以上的Web容器时(如使用JSF或Struts),你需要在Web应用的'web.xml'文件中增加 javax.servlet.ServletRequestListener 定义,这在spring2.5文档里有明确说名。(spring2.5文档 3.4. Bean的作用域)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
|
相关推荐
Struts2+Spring+Hibernate+Jsp+Mysql5 项目申报系统.zip
struts2+spring+ibatis+mysql AOP日志管理,异常捕获 tomcat6.0+jdk1.6
web框架PPT——Struts 2+Hibernate+MyBatis+Spring 网站开发案例课堂 备注:书籍信息:清华大学出版社,9787302500605
基于Struts2+Spring+Hibernate+MySql的注册登录系统.zip
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...
Struts2+Spring+Hibernate+MySQL整合
Struts2+maven+spring+mybatis整合,并实现注册功能实例。
maven构建项目,简单的struts2、spring、mybatis结构实现,页面展示用的easyui
自学两天ibatis后自己做的struts2+spring+ibatis+jquery ajax的登录注册
ACM在线评测系统,可以支持C、C++和Java+Struts2 + Spring + Hibernate+课程设计+毕业设计 ACM在线评测系统,可以支持C、C++和Java+Struts2 + Spring + Hibernate+课程设计+毕业设计 ACM在线评测系统,可以支持C、...
struts2+ajax+easyui+json+datagrid增,删,改,查,分页,排序,有数据库
项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5)130223
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
一个struts2+spring+hibernate+dwr的小实例,不过木有搭建说明,不过有dwr的使用说明,至于表结构可以看映射配置文件就知道创建什么表了
struts2+hibernate+spring+dwr(用户注册)struts2+hibernate+spring+dwr(用户注册)
Struts2+JDBC+jsp+mysql
使用struts2、hibernate、spring、dwr整合的简单项目。包括级联等 注意:csdn上面显示为chm文件。该文件为.7z的压缩文件。用压缩软件可以打开的 csdn弄错了
Struts2+Spring+Hibernate+ExtJS开发CRUD功能
本系统采用struts2+spring+hibernate+oracle代码齐全完整,适合作为SSH毕业设计,java毕业设计项目,计算机毕业设计,java课程设计,还是很不错的 很值得收藏 学习 探讨 研究。