控制器界面OnglAction
package com.web;
import org.apache.struts2.ServletActionContext;
import com.entity.Age;
import com.entity.Stu;
import com.opensymphony.xwork2.util.ValueStack;
import com.test.Employee;
import com.test.Student;
public class StuAction {
public String ongl1() {
ValueStack vs = ServletActionContext.getContext().getValueStack();
vs.push(new Employee("经理",1000));
vs.push(new Student("小明","aaaa"));
System.out.println(vs.findValue("name"));
System.out.println(vs.findValue("salary"));
return "do";
}
public String ongl2() {
ValueStack vs = ServletActionContext.getContext().getValueStack();
vs.push(new Age("aaa", 10));
vs.push(new Age("bbb", 15));
vs.push(new Age("ccc", 20));
Age e =(Age) vs.pop();
System.out.println(e.getId());
e =(Age) vs.pop();
System.out.println(e.getId());
e =(Age) vs.pop();
System.out.println(e.getId());
return "do";
}
}
创建所需要的实体类
package com.entity;
public class Age {
private String id;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Age(String id, int age) {
super();
this.id = id;
this.age = age;
}
public Age() {
super();
}
@Override
public String toString() {
return "Age [id=" + id + ", age=" + age + "]";
}
}
package com.entity;
public class Stu {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Stu(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public Stu() {
super();
}
@Override
public String toString() {
return "Stu [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
引用OnglExpression类
package com.test;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
public class OnglExpression {
private OnglExpression() {
}
public static Object getValue(String expression, OgnlContext ctx,
Object rootObject) {
try {
return Ognl.getValue(expression, ctx, rootObject);
} catch (OgnlException e) {
throw new RuntimeException(e);
}
}
public static void setValue(String expression, OgnlContext ctx,
Object rootObject, Object value) {
try {
Ognl.setValue(expression, ctx, rootObject, value);
} catch (OgnlException e) {
throw new RuntimeException(e);
}
}
}
配置struts-sy-xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 一个多包的概念,防止这个运行同样的项目路径包 -->
<package name="sy" extends="base" namespace="/sy">
<!--配置方法名的路径名 /sy/demo/jieshou.action -->
<action name="/ongl_*" class="com.ongl.OnglAction" method="{1}" >
<result name="do">/do.jsp</result>
</action>
<action name="/stu_*" class="com.web.StuAction" method="{1}" >
<result name="do">/do.jsp</result>
</action>
</package>
</struts>
运行index.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>
<!-- ongl 此例用于模拟struts2的值栈计算过程-->
<a href="${pageContext.request.contextPath}/sy/stu_ongl1.action">ongl方法讲解</a>
<!-- ongl 值栈的使用-->
<a href="${pageContext.request.contextPath}/sy/stu_ongl2.action">值栈的使用</a>
</body>
</html>