文档章节

struts2使用OGNL表达式

黄柳淞
 黄柳淞
发布于 2017/01/22 16:29
字数 952
阅读 13
收藏 0

Product.java

package com.huangliusong.entities;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;

public class Product {
	private Integer productId;
	private String productname;
	private String productdesc;
	private Double productprice;

	@Override
	public String toString() {
		return "Product [productId=" + productId + ", productname="
				+ productname + ", productdesc=" + productdesc
				+ ", productprice=" + productprice + "]";
	}

	public Product() {
		super();
		// TODO Auto-generated constructor stub
	}

	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;
	}

	public String save() {
		System.err.println("details" + this);
		// 获取值栈对象
		ValueStack valueStack = ActionContext.getContext().getValueStack();
		// 创建Test对象 并且为属性赋值
		Test test = new Test();
		test.setProductdesc("cpp-desc");
		test.setProductname("cpp");
		// 把 Test对象压栈 到值栈的栈顶
		valueStack.push(test);
		return "details";
	}
}


Test.java

package com.huangliusong.entities;

public class Test {
	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;
	}
	private String productname;
	private String productdesc;
}

node.txt

1.关于值栈

1)${productName}值 并不在request域中 而是在值栈中 获取的 	
2)valueStack

I 可以从actionContext中取值栈的对象
II值栈可以分为两个逻辑部分 

>MAP栈 实际上是OgnlContext 类型  里面保存着各种map
requestMap sessionMap parameterMap attribute
>对象map 实际上是Componen类型 是一个使用ArrayList定义的栈 里面保存和	当前Action实例相关的对象 是一个数据结构意义的栈
 使用s:property标签和OGNL表达式来读取值栈中属性值
 
 1.值栈中的属性值:
 >对于对象栈:对象栈中某一个对象的属性值。
 >map栈request,session,application 的一个属性值或者一个请求参数的值。
 
 2.读取对象栈中对象的属性可以采用object.propertyName object['propertyName'] object["propertyName"]
   可以通过加下标的方式进行读取:[0].message读取0对象的message属性 从第0个对象进行搜索 可以结合s:property
   标签s:property value="[0]message" 等同于 <s:property value="message">
   
 action对象会被struts2自动的放到值栈里面的栈顶
 

 


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="Product_input" >
			<result>/WEB-INF/pages/input.jsp</result>
		</action>
		<action name="pruduct_save" class="com.huangliusong.entities.Product" method="save">
			<result name="details">/WEB-INF/pages/details.jsp</result>
		</action>
	</package>
</struts>    

details.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 导入标签struts2 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>商品的详细信息</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>
<s:debug></s:debug>
<body>
	ID:${productId }
	<br> 名字:${productname }
	<br> 描述:${productdesc }
	<br> 价格:${productprice }
	<br>
	<!-- 使用ognl读取属性 -->
	使用ognl读取属性 <br>
	ID:
	<s:property value="[0].productId" />
	<br> 名字:
	<s:property value="[0].productname" />
	<br> 描述:
	<s:property value="[0].productdesc" />
	<br> 价格:
	<s:property value="[0].productprice" />
	<br>


</body>
</html>


input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>页面输入也</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>

<body>
	<form action="pruduct_save.action" method="post">
		产品名字<input type="text" name="productname"><br> 产品描述<input
			type="text" name="productdesc"><br> 产品价格<input
			type="text" name="productprice"><br> <input
			type="submit" value="提交">
	</form>

</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>strust2-6</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
   <h1>
   	 <a href="Product_input.action">Product_input</a>
   </h1>
  </body>
</html>

效果

 

© 著作权归作者所有

黄柳淞
粉丝 2
博文 108
码字总数 54251
作品 0
南宁
程序员
私信 提问
ognl-值栈基本操作

一 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大 (1)在Struts2里面操作值栈数据 (2)一般在Struts2里操作ogn...

Bbigbug
2017/10/16
0
0
struts2之ognl表达式

OGNL表达式语言介绍; OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写, 它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。 OGNL相对其它表达式语言具有下面...

长平狐
2012/09/03
320
0
Struts 2.0.0 – Struts Struts 2.3.24.1 漏洞解决办法

背景介绍: Struts2 是全球使用最广泛的 Java web 服务端框架之一。Struts2 是 Struts 的下一代产品,是在 Struts1 和 WebWork 的技术基础上进行了合并的全新的 Struts2 框架。 在此之前 S2...

凯文加内特
2016/07/04
59
0
struts2的OGNL表达式

一、 sturts2OGNL表达式,即 Object Graph Navigation Language,对象图形化导航语言。是一门方便操作对象属性的表达式语言。具有以下特点: 1、支持对象方法调用和值的访问。如user.getUsern...

xinyitianii
2014/06/15
0
0
struts2之OGNL和struts2标签库和ValueStack对象

OGNL简介:    (1)OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。      struts2框架默认就支持Ognl表达式语言(所以struts必须引用的包:...

别叫小伙
2017/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

再一次生产 CPU 高负载排查实践

前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU ...

crossoverJie
18分钟前
1
0
Java的线程同步和并发问题示例

并发问题 多线程是一个非常强大的工具,它使我们能够更好地利用系统的资源,但我们需要在读取和写入多个线程共享的数据时特别小心。 当多个线程尝试同时读取和写入共享数据时,会出现两种类型...

hiuh
今天
4
0
Spring Boot 常用注解说明

实体类 @Entity (实体类注解) @Table(可指定表名) @Data(可缺省get/set) @Id(指定属性主键) @GeneratedValue(指定主键生成规则) @Transient(表示此数据不在数据库表里建立属性) ...

兜兜毛毛
今天
3
0
局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
今天
2
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部