OGNL:
应用的场景:
标签中:
<s:property value="user.name">
配置文件中
<result type="redirect">/main.jsp?name=${name}</result>
调用值栈中对象的普通方法
<s:property value="user.get()">
调用Action中的静态方法 @
<s:property value="@cn.hhty.action.LoginAction@get()">
获取List集合:有序不重复
<s:property value="testList"/> 结果:[list1,list2,list3]
获取集合中的某一个元素
<s:property value="testList[0]">
(可以使用数组中的下标来获取List中的内容)
获取Set集合:无序可重复
获取Set集合
<s:property value="testSet"/> 结果:[set1,set2,set0]
获取Set中某一元素(由于Set无序,所有不能使用下标来取得)
获取Map集合
<s:property value="testMap"/>结果:[key1=value1,key2=value2]
获取Map中某一元素
<s:property value="testMap['key']">
获取大小
<s:property value="testMap.size">
返回map中所有的键:<s:property value="testMap.keys">
返回Map中所有的值:<s:property value="testMap.values">
获取List中所有的对象
<s:property value="listStudents">
利用投影获取List中对象的username属性值
<s:property value="listStudents.(username)">
利用投影获取List中第一个对象的username属性值
<s:property value="listStudents.(username)[0]">
利用投影获取List中成绩及格的对象
<s:property value="listStudents.(?#this.grade>=60).{username}[0]"/>
OGNL中#的使用:
#可以取出堆栈中上下文中存放的对象
名称 | 作用 | 例子 |
parameters | 包含当前http请求参数的Map | #parameters.id[0]相当于request.getParameter("id"); |
request | 包含当前HttpServletRequest的属性(attribute)的Map | #request.userName相当于request.getRequest("userName"); |
session | 包含当前HttpSession的属性(attribute)的Map | #session.userName相当于session.getAttribute("userName"); |
application | 包含当前ServletContext的属性(attribute)的Map | #application.userName相当于application.getAttribute("userName"); |
attr | 依次request->session->application |
后台:实现 RequestAware,SessionAware接口
Map request;
request.put("res","requestValue");
Map session;
session.put("ses","sessionValue");
前台获取:
获取request范围中的属性
<s:property value="#request.res">
获取Session范围中的属性值
<s:property value="#session.ses">
parameters方式
<action name="test" class="com.testAction">
<result type="redirect">/test.jsp?username=aabbcc</result>
</action>
在test.JSP里取值
获取Parameters对象的属性:(如果type!=redirect。则取不出来值)
<s:property value="#parameters.username">
注:默认的type是dispatcher, url后传的值前台取不到
OGNL中%的使用:
%可以取出存在值堆栈中的Action对象,直接调用它的方法
例如:如果Action继承了ActionSupport,那么在页面标签中
用%{getText('key')}的方式可以拿出国际化信息
%{}里面的内容表示是一个表达式,
$有两个主要用途:
1,用于在国际化资源文件中,引用OGNL表达式
2.在Struts2配置文件中,引用OGNL表达式 url?name=${name}
ValueStack对象,这个对象贯穿整个Action的生命周期(每个Action类的对象实例化会
有一个ValueStack对象),当Struts2接收到一个.action的请求后,会先建立
Action类的对象实例,但并不会调用Action方法 ,而是先将Action类的相应属性放
在ValueStack对象顶层节点(ValueStack对象相当于一个栈)
可以省写#号 如:<s:property value="user.username">
************************************
注:ValueStack需要使用服务器跳转才行
***************************************
前台:<input type="text" name="username">
<input type="text" name="password">
Test1Action:
private String username;
private String password;
private Student student;
getter/setter
execute method just return success
Test2Action
private Student student;
execute method just return success
服务器跳转:
<action name="test1" class="com.test.test1Action">
<result type="chain">
<param name="actionName">test2</param>
</result>
</action>
<action name="test2" class="com.test.test2Action">
服务器跳转 <result>
test2.jsp
</result>
</action>
test2.jsp
从值栈中取用户名:<s:property value="username"/>
此时值栈里有Test1Action,Test2Action的信息,且Test2在顶层,先会在Test2Action里取值,如果没有,再到Test1Action中取
如果想取值栈中第二个对象,则使用Top获取法:<s:property value="[1].top.student">
Top语法:取栈中的对象(也即Action) 从0开始
N语法获取属性:<s:property value="[1].student"> 从0开始
@语法:
栈:后进先出
======================================================
客户端跳转
<action name="test1" class="com.test.test1Action">
<result type="redirectAction">
<param name="actionName">test2</param>
</result>
</action>
<action name="test2" class="com.test.test2Action">
服务器跳转 <result>
test2.jsp
</result>
</action>
此时值栈里只有test2Action的信息了。
========================================================
<action name="test1" class="com.test.test1Action">
<result type="redirectAction">
<param name="actionName">test2?username=${username}</param>
</result>
</action>
<action name="test2" class="com.test.test2Action">
<result type="redirect">
test2.jsp
</result>
</action>
此时值栈里没有信息
在Action里也可以往ValueStack里手动的添加对象
ActionContext.getContext().getValueStack().push(new Student());
调用Action中的静态方法
<s:property value="@test1@get()"/>
获取ValueStack中第一个学生的信息
<s:property value="[0].username"/>
分享到:
相关推荐
本篇笔记主要介绍了在Struts2中使用OGNL的一些基本用法。 首先,OGNL可以用来获取不同范围内的属性值。在Java Web开发中,有四种常见的作用域:Request、Session、Application和Page。在示例代码中,`<s:property>`...
Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...
通过深入学习和实践《Ognl_JSTL_学习笔记.doc》,开发者可以熟练掌握这两种技术,提高在Java Web开发中的效率和代码质量。在实际工作中,理解并灵活运用Ognl和JSTL,能够更好地设计和实现交互丰富的Web应用。
新手学习整理的OGNL笔记。可能有不正确之处,请谨慎。
这个压缩包包含了OGNL的源代码和作者的个人笔记,对Java开发者尤其是对OGNL感兴趣的爱好者来说,是很好的学习资源。 首先,我们来了解一下OGNL的基本概念。OGNL的核心功能是提供一种简洁、灵活的方式来访问和操作...
Struts2_OGNL笔记主要关注的是如何在Struts2框架中使用OGNL(Object-Graph Navigation Language)表达式语言。OGNL作为一种强大的表达式语言,常用于Struts2的视图层,允许开发者轻松地访问和操作Java对象的属性。 ...
**OGNL笔记** OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要用于Java应用程序,特别是用于在对象图中导航和操作数据。它被广泛应用于Spring框架中的视图层,如Spring MVC,用于在视图中...
### Thymeleaf 学习笔记关键知识点 #### 一、Thymeleaf 概述与优势 **Thymeleaf** 是一款现代且高级的模板引擎,它为 Web 和独立环境提供了强大的模板处理能力。根据给定内容,我们可以看出 Thymeleaf 的一些主要...
本笔记将深入探讨Struts2的核心概念、发展历程、使用方法以及与OGNL(Object-Graph Navigation Language)的结合应用。 **一、Struts2概述** 1.1 为什么要用Struts 在Java Web开发中,Struts2作为MVC框架,能够...
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
本学习笔记将详细阐述Struts2的核心概念、发展历程、使用步骤以及OGNL技术。 一、Struts2概述 1.1 为什么要用Struts 在传统的JSP开发中,模型与视图、控制器的耦合度较高,导致代码维护困难。Struts2引入了MVC...
本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...
在“struts中文文档及学习笔记”中,我们可以找到关于Struts框架的详细信息。首先,文档可能包含了Struts的基本概念,如Action、Form Bean、Result、Interceptor等核心组件的介绍。Action是处理用户请求的核心,它...
本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...