struts2学习笔记 -- day08 Struts2中使用EL表达式

一、Struts2中使用EL表达式

1、jsp中的el表达式取值过程

pageScope  -->  requestScope  -->  sessionScope  -->  applicationScope

按照以上顺序,从小范围到大范围去找,如果找到,就把数据取出,不继续往下找了。

使用的是pageContext.findAttribute(String name);这个方法。pageContext可以获取其他8个隐式对象,也可以访问其他3个域

public String PageContext(){
		/**
		 *  四大域搜索
		 */
		public Object findAttribute(String name){
			Object value = null;
			//1.先去page域中找
			value = this.getAttribute(name);
			if(value != null){
				return value;
			}

			//2.去请求域中找
			value = this.getRequest().getAttribute(name);
			if(value != null){
				return value;
			}

			//3.去会话域中找
			value = this.getSession().getAttribute(name);
			if(value != null){
				return value;
			}

			//4.去应用域中找
			value = this.getServletContext().getAttribute(name);
			if(value != null){
				return value;
			}

			return value;
		}

	}

2、el表达式和ognl表达式取值区别

(1)、分别在request域中和动作类中存值

public class UserAction extends ActionSupport {

	private String name = "动作类中的name";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	/**
	 * 1、向请求域中放入一个name值
	 * 2、向动作类中放入一个属性,名为name
	 * 3、在jsp页面同时使用el表达式和ognl表达式,获取数据
	 */
	public String value(){
		//获取request对象
		HttpServletRequest request = ServletActionContext.getRequest();
		//存值
		request.setAttribute("name", "request域中的name");
		return SUCCESS;
	}
}


结论:el表达式获取的是request中的数据,ognl表达式获取的是动作类中的数据

(2)、分别向动作类和session域中存值

public class UserAction extends ActionSupport {

	private String name = "动作类中的name";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	/**
	 * 1、向session域中放入一个name值
	 * 2、向动作类中放入一个属性,名为name
	 * 3、在jsp页面同时使用el表达式和ognl表达式,获取数据
	 */
	public String value(){
		//获取request对象
		HttpServletRequest request = ServletActionContext.getRequest();
		//存值
		request.getSession().setAttribute("name", "session域中的name");
		return SUCCESS;
	}
}


结论:el表达式获取的是动作类中的数据,ognl表达式获取的也是动作类中的数据,即此处使用el表达式也是获取的值栈中的内容

3、分析struts2对el表达式的改变

以上存取值过程,我们可以得出结论,在struts2中使用el表达式取域对象中的数据时,在request和session二者中有一个出现了跟原生对象不一样

查看底层源码发现struts2中对request的底层进行了封装


结论:在struts2中使用el表达式,从域对象中取值的顺序是

pageScope  -->  requestScope  -->  valueStack  --> contextMap  -->  sessionScope  -->  applicationScope

二、各种符号总结

1、#号

获取大Map中数据,把后面的内容看成是key。

在使用struts2标签,创建Map对象时使用。<s:radio list="#{}">

2、%号

使用%{''}把OGNL表达式强制看成是普通字符串

使用%{}把普通字符串强制看成是OGNL表达式

3、$号

使用EL表达式的标识

在struts的配置文件中使用OGNL表达式



版权声明:本文为wingzhezhe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wingzhezhe/article/details/76711899

智能推荐

Struts2框架学习笔记_Struts2入门

文章为学习struts的笔记,可供读者参考,有不足之处还望之指出。 参考: POJO与JavaBean的区别 Velocity Velocity官网 FreeMarker XSLT struts2 学习笔记 回顾MVC struts1 webwork struts2 struts2登录项目搭建 StrutsPrepareAndExecuteFilter过滤器 Action与请求参数 Action控...

Struts2学习笔记(1)-Struts2概览

一、Struts2 二、MVC模式 三、Struts2的发展过程 四、Struts2的工作流程 工作流程如下: 五、Struts2的核心文件 web.xml文件(项目部署文件) struts.xml文件 struts.properties文件 注释:文件具体内容介绍参看相关文件描述。...

Struts2学习笔记一(Struts2入门)

这是笔者在学习过程中的知识记录,可能有错误的地方,仅供参考 #Struts2的入门 Struts2的简介 在Javaee开发中,我们一般将整个项目分成表现层,业务层,和持久层,在持久层就是和数据库打交道,之前的Hibernate就是属于这个层的,在表现层我们在没有框架之前是使用jsp+servlet+javabean的MVC设计模式来实现的,Struts2框架就是用来代替之前表现层的开发模式的,或...

EL表达式(JSP)、OGNL表达式(Struts2标签库)介绍及struts2中View与Controller的数据交换

一.EL表达式 EL表达式全名为Expression Language,可用于JSP页面中取值。EL 语法很简单,它最大的特点就是使用上很方便。EL主要的语法结构:${sessionScope.user.sex},所有EL都是以${为起始、以}为结尾的。 1.使用EL表达式取域中的变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变...

Struts2 使用OGNL表达式

使用之前,需要使用到包分别是: javassist-3.11.0.GA.jar 和 ognl-3.0.6.jar 如图:   Cat 实体类   Dog 实体类   使用OGNL表达式   效果图:    ...

猜你喜欢

Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理

文章目录 1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理 1.1. 什么是OGNL表达式 1.2. 使用OGNL表达式 1.3. Struts2和ONGL表达式的结合原理 1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理 1.1. 什么是OGNL表达式 OGNL:对象视图导航语言,是比EL表达式有更加丰富的功...

【JUC】004-ReadWriteLock读写锁

目录 一、ReadWriteLock读写锁 1、概述 官方文档介绍: 2、问题引出 代码实现: 运行结果: 问题: 3、使用读写锁 代码实现: 运行结果: 4、分析 一、ReadWriteLock读写锁 1、概述 官方文档介绍: 读可以多个线程读,写只能一个线程写;   2、问题引出 代码实现: 运行结果: 问题: 出现了多线程不安全的问题,我们要实现的是“读可以多个线程读,...

Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈  通常,这类需求在客户端应用中不太会用到,但是在后端的各种统计分析模块会经常碰到。比如:通过折线图、柱状图、雷达图等可视化形式,更直观的展现和分析经营状况或系统运行情况。这里我们将引入的数据可视化组件库 ECharts来帮助我们完成这样的任务。 ECharts简介 ECharts是百度开源的一个前端组件。它是一个使用 J...

Java数据结构和算法之环形队列

实现原理: 代码实现: 总结: 思路并不太难,主要是理解rear和front相等时歧义的消除。如果对为什么每次移动rear和front都 取模以及判断有效值个数的时候的取模等操作不太理解,就画图看下,你就懂了。...

前端打印页面window.print(),会把页面把A标签里面的href属性也给打印出来解决办法

一、问题描述: 大家都知道用window.print()可以实现调用浏览器的打印功能从而打印系统页面 但是直接用window.print()会把A标签里面的href属性也给打印出来了,如下图所示   二、解决办法 解决办法也很简单,只要加上如下css代码就可以啦 三、最后对自己说的  做梦也没想到自己也能有30个粉丝,有的文章还被人收藏了,嘻嘻嘻,超开心啊!  虽然我...