struts2使用OGNL表达式

本文介绍了一个基于Struts2框架的示例应用,深入解析了值栈(Value Stack)的概念及其在Struts2中的作用。文章通过具体代码展示了如何在Struts2中利用值栈存储和传递数据,并介绍了OGNL表达式的使用方法。

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>

效果

162854_hP3x_3015803.png

 

162914_aoQ2_3015803.png

转载于:https://my.oschina.net/liusonghuang/blog/829267

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值