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和MyBatis是Java Web开发中经典的三大框架,它们分别负责MVC模式中的控制层、业务层和服务层。EasyUI则是一个基于jQuery的UI组件库,用于快速构建美观且响应式的Web应用界面。下面我们将深入探讨这三...
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...
Struts2+Spring+Hibernate+EasyUI 是一个经典的Java Web开发框架组合,广泛应用于企业级应用的构建。这个管理系统利用这些技术的特性,提供了一种高效、稳定且易于维护的解决方案。 **Struts2** 是一个强大的MVC...
2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。 4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录...
ACM在线评测系统,可以支持C、C++和Java+Struts2 + Spring + Hibernate+课程设计+毕业设计 ACM在线评测系统,可以支持C、C++和Java+Struts2 + Spring + Hibernate+课程设计+毕业设计 ACM在线评测系统,可以支持C、...
不错的适合练手、课设、毕设的JSP源码:项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5)不错的适合练手、课设、毕设的JSP源码:项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5)不错的适合练手、课设、毕设的...
Struts2、Ajax、EasyUI、JSON 和 DataGrid 是现代Web开发中常用的技术组合,用于构建功能丰富的交互式用户界面。下面将详细解释这些技术及其在实现增删改查、分页和排序功能中的作用。 **Struts2** 是一个基于MVC...
【Struts2+Spring+Hibernate+MySQL整合】是企业级Java应用开发中常见的技术栈,也被称作SSH框架。这个组合提供了模型-视图-控制器(MVC)架构模式,数据库管理,以及依赖注入和事务控制的能力。下面将详细介绍这个...
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
本系统采用struts2+spring+hibernate+oracle代码齐全完整,适合作为SSH毕业设计,java毕业设计项目,计算机毕业设计,java课程设计,还是很不错的 很值得收藏 学习 探讨 研究。
Struts2+JDBC+jsp+mysql 构建的考勤...总结,Struts2+JDBC+jsp+mysql的考勤系统是结合了前端MVC框架、数据访问、动态页面和数据库存储的综合应用,它提供了一个高效、可扩展的解决方案,满足企业对员工考勤管理的需求。
系统搭建使用struts2 + spring + hibernate + easyui 整合的, 功能包括: 分页查询,自定义页面数据显示量,用户名模糊搜索,创建时间段,更新时间段内用户信息搜索,双击行进行编辑,多行选中删除,右键菜单已经写好...
Struts2+hibernate4+layui+mysql简单的网站后台管理系统 项目描述 简单的网站后台管理系统 运行环境 jdk7+tomcat7+mysql+myeclipse 项目技术(必填) struts2+hibernate4+layui+jquery+jstl 数据库文件 src根...
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
struts2的小例子。数据库表的创建请参见工程中的sql.txt文件。实体映射采用的是实体标注映射,省去了*.hbm.xml文件。 /WEB-INF/lib中的包请在另一个资源中下载。(由于超过了10M,所以分开了。)
Eclipse+Struts2+Spring+MyBatis+jQuery整合教程,Eclipse+Struts2+Spring+MyBatis+jQuery整合教程.
导入myclipse即可,MySql...项目介绍: 1.struts2.8.1+hibernate3+spring2.5 2.统一的jquery表单验证方式,复用性强 3.jquery+ajax应用 4.界面风格漂亮, 本人的毕业设计,有需要者下载参考,项目有很多代码注释
总结来说,“Struts2+Json+Android简单实现”是一个典型的前后端交互示例,展示了如何利用Struts2作为服务端接口,通过JSON进行数据交换,最后在Android客户端进行数据展示和用户交互。理解并掌握这种技术栈对于构建...
基于Struts2+Hibernate+Spring+Mysql的互联网在线点餐系统源码(全国大学生计算机设计大赛软件开发省二).zip 基于Struts2+Hibernate+Spring+Mysql的互联网在线点餐系统源码(全国大学生计算机设计大赛软件开发省二)....