Struts2中ognl中值栈
2017-03-15 23:15
309 查看
1:input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<form action="../productAction" method="post">
productName:<input type="text" name="productName"/><br/><br/>
productDesc:<input type="text" name="productDesc"/><br/><br/>
productPrice:<input type="text" name="productPrice"/><br/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2: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>Struts2Env</display-name>
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3:struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--打开静态方法调用的限制 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.custom.i18n.resources" value="globalResourceMessages"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="userLogin" class="com.action.UserAction" method="execute">
<result name="success">/success.jsp</result>
</action>
<action name="logout" class="com.action.UserAction" method="logout">
<result name="logout">/login.jsp</result>
</action>
<action name="testResult" class="com.action.TestResultAction" method="execute">
<result name="success">/success.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="UserAction-*" class="com.action.UsersAction" method="{1}">
<result name="{1}-success">/success.jsp</result>
</action>
<action name="productAction" class="com.valueStack.Product" method="save">
<exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
<result name="success">/pages/details.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
</struts>
4:Action
package com.valueStack;
public class TestValueStack {
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;
}
}
5:TestAction
package com.valueStack;
import java.util.Map;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
public class Product implements RequestAware,SessionAware{
private int productId;
private String productName;
private String productDesc;
private double productPrice;
private Map<String, Object> sessionMap;
private Map<String, Object> requestMap;
public int getProductId() {
return productId;
}
public void setProductId(int 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 [productId=" + productId + ", productName=" + productName
+ ", productDesc=" + productDesc + ", productPrice=" + productPrice
+ "]";
}
public String save()
{
//1:获取值栈
ValueStack valueStack=ActionContext.getContext().getValueStack();
//2: 创建TestvalueStack对象并为其属性赋值
TestValueStack testvalueStack=new TestValueStack();
testvalueStack.setProductName("硬盘");
testvalueStack.setProductDesc("500GB存储量");
//3:把TestvalueStack对象压人到值栈的栈顶
valueStack.push(testvalueStack);
sessionMap.put("product", this);
requestMap.put("testValueStack",testvalueStack);
//int i=10/0;
return "success";
}
@Override
public void setSession(Map<String, Object> session) {
sessionMap=session;
}
@Override
public void setRequest(Map<String, Object> request) {
requestMap=request;
}
}
6:view.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>
<!--Action对象会被Struts2自动放到值栈栈顶 -->
<s:debug></s:debug>
ProductId:${productId}<br/><br/>
ProductName:${productName}<br/><br/>
ProductDesc:${productDesc}<br/><br/>
ProductPrice:${productPrice}<br/><br/><br/>
<h2>Struts2中valueStack的对象栈</h2>
<!--对象栈中保存的是:action类的对象 -->
ProductName:<s:property value="[1].productName"/><br/><br/>
ProductDesc:<s:property value="[1].productDesc"/><br/><br/>
ProductPrice:<s:property value="[1].productPrice"/><br/><br/>
ProductName:<s:property value="[0].productName"/><br/><br/>
ProductDesc:<s:property value="[0].productDesc"/><br/><br/>
ProductPrice:<s:property value="[0].productPrice"/><br/><br/><br/>
<h3>JSP中的EL表达式</h3>
ProductName:${sessionScope.product.productName}<br/><br/>
ProductDesc:${sessionScope.product.productDesc}<br/><br/>
ProductPrice:${sessionScope.product.productPrice}<br/><br/><br/>
<h3>Struts2中valueStack的Map栈</h3>
<!--Map栈中保存的是:请求的参数与属性 -->
ProductName:<s:property value="#session.product.productName"/><br/>
ProductDesc:<s:property value="#session.product.productDesc"/><br/>
ProductPrice:<s:property value="#session.product.productPrice"/><br/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<form action="../productAction" method="post">
productName:<input type="text" name="productName"/><br/><br/>
productDesc:<input type="text" name="productDesc"/><br/><br/>
productPrice:<input type="text" name="productPrice"/><br/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2: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>Struts2Env</display-name>
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3:struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--打开静态方法调用的限制 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.custom.i18n.resources" value="globalResourceMessages"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="userLogin" class="com.action.UserAction" method="execute">
<result name="success">/success.jsp</result>
</action>
<action name="logout" class="com.action.UserAction" method="logout">
<result name="logout">/login.jsp</result>
</action>
<action name="testResult" class="com.action.TestResultAction" method="execute">
<result name="success">/success.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="UserAction-*" class="com.action.UsersAction" method="{1}">
<result name="{1}-success">/success.jsp</result>
</action>
<action name="productAction" class="com.valueStack.Product" method="save">
<exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
<result name="success">/pages/details.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
</struts>
4:Action
package com.valueStack;
public class TestValueStack {
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;
}
}
5:TestAction
package com.valueStack;
import java.util.Map;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
public class Product implements RequestAware,SessionAware{
private int productId;
private String productName;
private String productDesc;
private double productPrice;
private Map<String, Object> sessionMap;
private Map<String, Object> requestMap;
public int getProductId() {
return productId;
}
public void setProductId(int 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 [productId=" + productId + ", productName=" + productName
+ ", productDesc=" + productDesc + ", productPrice=" + productPrice
+ "]";
}
public String save()
{
//1:获取值栈
ValueStack valueStack=ActionContext.getContext().getValueStack();
//2: 创建TestvalueStack对象并为其属性赋值
TestValueStack testvalueStack=new TestValueStack();
testvalueStack.setProductName("硬盘");
testvalueStack.setProductDesc("500GB存储量");
//3:把TestvalueStack对象压人到值栈的栈顶
valueStack.push(testvalueStack);
sessionMap.put("product", this);
requestMap.put("testValueStack",testvalueStack);
//int i=10/0;
return "success";
}
@Override
public void setSession(Map<String, Object> session) {
sessionMap=session;
}
@Override
public void setRequest(Map<String, Object> request) {
requestMap=request;
}
}
6:view.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>
<!--Action对象会被Struts2自动放到值栈栈顶 -->
<s:debug></s:debug>
ProductId:${productId}<br/><br/>
ProductName:${productName}<br/><br/>
ProductDesc:${productDesc}<br/><br/>
ProductPrice:${productPrice}<br/><br/><br/>
<h2>Struts2中valueStack的对象栈</h2>
<!--对象栈中保存的是:action类的对象 -->
ProductName:<s:property value="[1].productName"/><br/><br/>
ProductDesc:<s:property value="[1].productDesc"/><br/><br/>
ProductPrice:<s:property value="[1].productPrice"/><br/><br/>
ProductName:<s:property value="[0].productName"/><br/><br/>
ProductDesc:<s:property value="[0].productDesc"/><br/><br/>
ProductPrice:<s:property value="[0].productPrice"/><br/><br/><br/>
<h3>JSP中的EL表达式</h3>
ProductName:${sessionScope.product.productName}<br/><br/>
ProductDesc:${sessionScope.product.productDesc}<br/><br/>
ProductPrice:${sessionScope.product.productPrice}<br/><br/><br/>
<h3>Struts2中valueStack的Map栈</h3>
<!--Map栈中保存的是:请求的参数与属性 -->
ProductName:<s:property value="#session.product.productName"/><br/>
ProductDesc:<s:property value="#session.product.productDesc"/><br/>
ProductPrice:<s:property value="#session.product.productPrice"/><br/>
</body>
</html>
相关文章推荐
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- Struts2 值栈(Value Stack)与OGNL
- 走进Struts2(五)— 值栈和OGNL
- 7、struts2 案例( 模型驱动、 防止表单重复提交--拦截器 、数据回显 、值栈 、 OGNL表达式综合运用)
- 【JavaEE笔记】Struts2 (三) ognl、值栈操作等
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- Struts2学习记录-Value Stack(值栈)和OGNL表达式
- struts2(四) ognl表达式、值栈、actionContext之间的关系
- struts2--值栈以及OGNL
- Struts2使用之值栈与OGNL-使用
- Struts2的值栈-OGNL
- Struts2值栈和ognl表达式
- Struts2第三天 (OGNL、值栈)
- Struts2-值栈和OGNL
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- Struts2笔记3--获取ServletAPI和OGNL与值栈
- Struts2使用OGNL访问非值栈对象
- 关于struts2的值栈以及OGNL
- Struts2.x教程(二) OGNL和值栈
- struts2(OGNL和ValueStack(值栈))