Struts(十):OGNL表达式(一)
- Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值:
I、值栈中的属性值:
1、对象栈:读取对象栈中的某一个对象的属性值;
2、Map栈 :request,session,application的一个属性值或一个请求参数的值。
II、读取对象栈(ObjectStack)中的对象属性:
1、若想读取Object Stack里的某个对象的属性,可以通过以下集中形式之一:
object.propertyname
object['propertyname']
object["propertyname"]
2、ObjectStack中的对象可以从0开始的的下表来引用,ObjectStack里的栈顶对象可以用[0]来引用,它下面的那个对象可以用[1]引用。
[0].message
3、[n]的含义是从第n个开始搜索,而不是值搜索第n个对象
4、若从栈顶对象开始搜索,则可以省略下标部分:message
5、结合s:property标签<s:property value="[0].message" />或者 <s:property value="message"/>(通常情况下都采用这种方式来写)
<%@ taglib prefix="s" uri="/struts-tags"%>备注:如果需要使用s:property标签,必须在jsp页面头部引入:
III、默认情况下,action会被struts2自动放在值栈的顶部。
- 值栈属性读取示例:
基于《Struts(九):值栈(OGNL)》这一篇文章的例子基础上,修改details.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <s:debug/> <s:property value="productName"/><br/>
${productDesc}<br/>
${productPrice}<br/> </body>
</html>
调试启动tomcat,输入地址:http://localhost:8080/Struts_01/,页面:
点击“提交”按钮,跳转到details.jsp
点开[Debug]
这里边的com.dx.sturts2.valuestack.Product存储的对象就是Action,被存储到了ValueStack的栈顶,所以details.jsp页面可以使用${productDesc},相当于<s:property value="[0].productDesc"/> 也相当于<s:property value="productDesc"/>
添加一个Product2.java:
package com.dx.struts2.valuestack; public class Product2 {
private String productName;
private String productDesc; public String getProductName() {
return productName;
} public void setProductName(String productName) {
this.productName = productName;
} public String getProductDesc() {
return productDesc;
} public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
} }
修改Product.java Action save方法:
public String save(){
System.out.println("save"); // 1、获取值栈对象
ValueStack valueStack= ActionContext.getContext().getValueStack(); // 2、生成一个Product2对象
Product2 product2=new Product2();
product2.setProductDesc("product2 desc");
product2.setProductName("product2 name"); // 3、将Product2对象存放到值栈中
valueStack.push(product2); return "success";
}
继续查看details.jsp:
调试Product的save方法:
从截图我们可以知道:Action类对象在进入save方法之前就已经被放入到栈顶。
details.jsp:
点开[Debug]
Struts(十):OGNL表达式(一)的更多相关文章
- Struts 2 OGNL
1.什么是OGNL? 2.Struts 2 OGNL 表达式 ====================== 华丽丽的分割线 ====================== 1.什么是OG ...
- (七)Action之ActionContext(OGNL表达式的使用)
一.ActionContext的重要性 struts中的数据都存放在ActionContext里,所以这部分是Action中的核心. ActionContext又称广义值栈,既然有广义值栈就有侠义值栈 ...
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...
- 六 Struts 拦截器、OGNL表达式
一.OGNL表达式1.概念:是表达式语言,专门用来访问对象取值用的.2.对比EL表达式使用场景: A.EL主要用在web的jsp页面取值 B.OGNL适用以下环境 1.java程序中 2.在页面使用( ...
- struts框架中OGNL表达式的使用之jsp页面获取action中的属性值
在jsp页面中获取action中的值: 1.写一个action类OgnlAction类: 需要注意的地方: 如果在aciton中直接使用ognl表达式,将值存储的值栈中,是不能通过跳转将值传到jsp页 ...
- struts框架之总结OGNL表达式的特殊的符号
1. # 符号的用法 * 获得contextMap中的数据 > <s:property value="#request.name"/> > <s:pr ...
- Struts ognl表达式语言几个符号
# 获取非根元素值 . 动态都建map集合 $ 配置文件取值 % 提供一个ognl表达式运行环境 <%@ page language="java" import=&q ...
- Java实战之01Struts2-04拦截器、上传下载、OGNL表达式
十二.Struts2中的拦截器 1.拦截器的重要性 Struts2中的很多功能都是由拦截器完成的.比如:servletConfig,staticParam,params,modelDriven等等. ...
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
随机推荐
- Django基本命令
下载Django pip3 install django #默认下载最新版 pip3 install django==1.11.1 #手动选择版本 创建Django项目 格式:django-admin ...
- 收集nodejs经典组件:
mysql功能简介:mysql- node.js平台mysql驱动,支持事务.连接池.集群.sql注入检测.多做参数传递写法等特性.主页地址:https://github.com/felixge/no ...
- R语言-用户细分
案例:通过使用R语言的聚类算法将用户进行合理的划分,找出对超市贡献度,光临度最高的优质客户,对后期的推广有更深远的影响 1.导入包 library(dplyr) library(reshape2) l ...
- Mycat 注解说明
我们知道MySQL 数据库有自己的SQL注解(hint),比如 use index.force index.ignore index 等都是会经常用到的,Mycat 作为一个数据库中间件,最重要的是 ...
- POJ-1032-拆数字
Description New convocation of The Fool Land's Parliament consists of N delegates. According to the ...
- java常用集合总结
1.线程安全 线程安全就是说多线程访问同一代码,不会产生不确定的结果. 2.List类和Set类List类和Set类是Collection集合接口的子接口.Set子接口:无序,不允许重复.List子接 ...
- 实现Windows程序的数据绑定
1.创建DataSet对象 语法: DataSet 数据集对象 =new DataSet("数据集的名称字符串"); 语法中的参数是数据集的名称字符串,可以有,也可以没有.如 ...
- Struts2学习笔记一 简介及入门程序
Struts2是一个基于MVC设计模式的web应用框架,它本质上相当于一个Sevlet.是Struts1的下一代产品,是在structs1和WebWork技术的基础上进行合并后的全新框架(WebWor ...
- hibernate框架学习笔记9:多对多关系案例
员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...