15.Struts2_OGNL读取对象栈(ObjectStack)属性
来源:互联网 发布:星星知我心插曲 编辑:程序博客网 时间:2024/06/08 18:24
一.Struts2利用 s:property 标签和 OGNL 表达式来读取值栈中的属性值
例:结合s:property标签:<s:property value="[0].message"/>(读取栈顶的属性值)
二.值栈中的属性值:
(1)对象栈: 对象栈中某一个对象的属性值
(2)Map 栈: request, session, application 的一个属性值 或 一个请求参数的值.
三.读取对象栈中对象的属性:
1.若想访问 Object Stack 里的某个对象的属性. 可以使用以下几种形式之一:
(1)object.propertyName ;
(2)object[‘propertyName’] ;
(3)object[“propertyName”]
2.ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用, 它下面的那个对象可以用 [1] 引用.
例:若希望返回栈顶对象的message属性值:[0].message或[0]["message"]或[0]['message']
3.若在指定的对象里没有找到指定的属性, 则到指定对象的下一个对象里继续搜索. 即 [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象
4.若从栈顶对象开始搜索, 则可以省略下标部分: message
结合 s:property 标签: <s:property value="[0].message" /> 同于<s:property value="message" />
注意:(1)默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶.
(2)debug标签:
Struts2标签使用前的准备:
在要使用标签的jsp页面引入标签库: <%@ taglib uri="/struts-tags" prefix="s"%>
四.
例1:
1.目录:
2.在WebContent下的WEB-INF下的lib包中导入struts2需要的jar包
3.配置web.xml文件
4.input.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!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=ISO-8859-1"><title>Insert title here</title></head><body> <form action="product-save.action" method="post"> ProductName:<input type="text" name="productName"/> <br/> ProductDesc:<input type="text" name="productDesc"/> <br/> ProductPrice:<input type="text" name="productPrice"/> <br/> <input type="submit" value="submit"/> </form></body></html>5.details.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><s:debug></s:debug> ProductId:${productId}<br/> ProductName:${productName}<br/> ProductDesc:${productDesc}<br/> ProductPrice:${productPrice}<br/> ProductId:<s:property value="[0].productName"/><br/> ProductId:<s:property value="productDesc"/><br/> ProductId:<s:property value="productPrice"/><br/> </body></html>6.Product.java
package actionbao;public class Product { private Integer productId; private String productName; private String productDesc; private Double productPrice; public Integer getProductId() { return productId; } public void setProductId(Integer productId) { this.productId = productId; } 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; } public Double getProductPrice() { return productPrice; } public void setProductPrice(Double productPrice) { this.productPrice = productPrice; } @Override public String toString() { return "Product [productName=" + productName + ", productDesc=" + productDesc + ", productPrice=" + productPrice + "]"; } public String save() { System.out.println("save " + this); return "details"; } }7.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- struts基本配置内容 --> <!-- package-name:包,struts2使用package来组织模块。用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承; package-namespace:必须,用于其它的包应用当前包。用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分; package-extends:当前包继承哪个包,即可以继承期中的所有的配置。用于继承其它package以使用里面的过滤器等东东; --> <package name="struts" namespace="" extends="struts-default"> <!-- action-name:用于在一个package里区别不同的action,一个struts2的请求就是一个action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分; action-class:action所在的路径(包名+类名); action-method:action所调用的方法名; 默认执行execute,所以execute可以不写 result:结果 --> <action name="product-save" class="actionbao.Product" method="save"> <result name="details">/details.jsp</result></action> </package> </struts>
结果图:
例2:
此时我们在action方法中手动压入一个对象:
还是在Project.java中:
public String save() { System.out.println("save " + this); //1.获取值栈 ValueStack valueStack = ActionContext.getContext().getValueStack(); //2.创建Test对象,并为其属性赋值 Test czy = new Test(); czy.setProductName("AAAAAA"); czy.setProductDesc("BBBBBB");//3将新对象压入值栈中 valueStack.push(czy); return "details"; }
并在actionbao下创建一个test.java
package actionbao;public class Test { 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;}}
details.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><s:debug></s:debug> ProductId:${productId}<br/> ProductName:${productName}<br/> ProductDesc:${productDesc}<br/> ProductPrice:${productPrice}<br/> ProductId:<s:property value="[0].productName"/><br/> ProductId:<s:property value="[1].productName"/><br/> ProductId:<s:property value="productDesc"/><br/> ProductId:<s:property value="productPrice"/><br/> </body></html>
还是在input.jsp页面输入cpu,intel,1200
结果:
注意事项
- 15.Struts2_OGNL读取对象栈(ObjectStack)属性
- 16.Struts2_OGNL读取Map栈(Context Map)里对象的属性及其他字段和方法
- (16)Struts2_OGNL读取Map栈及其他字段和方法属性
- (15)Struts2_OGNL读取Object栈
- Struts2_OGNL和值栈
- Struts2_OGNL
- Struts2_OGNL
- struts2_ognl表达式与值栈
- ResourceBundle 对象读取属性文件
- 01 Struts2_OGNL
- 8.struts2_OGNL
- Struts2_ognl表达式
- 很有意思的Object对象属性读取
- 面向对象设计-----属性类型 读取属性特性
- LHF Objective-C语法(11)写入和读取属性 对象的复制
- (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- 利用InputStream 属性直接从HttpPostedFile对象读取文本内容
- 对象属性名是数字时怎样读取
- Spring Boot干货——(三)静态资源与拦截器
- Variational Inference入门:Mean field for the Ising model
- AES加密
- python 切片
- 初遇Java
- 15.Struts2_OGNL读取对象栈(ObjectStack)属性
- init: function (){}方法的写法原因
- Ubuntu下安装Discuz(非常简单)
- Ajax 求大神帮忙!
- Effect(九)—— OnlySoundEffect
- redis持久化那些事(kēng)
- CAESARII 5.1 无限使用功能\
- PhpMyAdmin 配置文件现在需要一个短语密码的解决方法
- 描述函数栈帧的调用过程