一、
1、新建三个包
第一个包org.zttc.itat.action 下新建 2个action
UserAction.java
package org.zttc.itat.action;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
public class UserAction {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String addInput(){
System.out.println(username+","+password);
return "success";
}
public String add(){
return "r_list";
}
public String list(){
//传值第一种方式,通过在action中设置相应的get和set方法。
this.setUsername("张三");
this.setPassword("123");
//传值第二种方式,通过ActionContext完成值得传递。
/*
* 使用<s:property value="#aaa"/> 形式的 value中都要加#才能访问到,否则出错。
*/
ActionContext.getContext().put("aaa", "123");
ActionContext.getContext().put("bbb", "456");
ActionContext.getContext().put("ccc", 789);
//传值第三种方式 ,可以通过servlet的API传值
ServletActionContext.getRequest().setAttribute("hello", "world");
return "success";
}
}
RoleAction.java
package org.zttc.itat.action;
public class RoleAction {
public String add(){
return "success";
}
}
第二个包org.zttc.itat.model下面新建 3个类
User.java
package org.zttc.itat.model;
public class User {
private int id;
private String username;
private String nickname;
private Department dep;
public int sum(int a,int b){
return a+b;
}
public String hello(String word){
return "hello"+word;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Department getDep() {
return dep;
}
public void setDep(Department dep) {
this.dep = dep;
}
public User(int id, String username, String nickname) {
super();
this.id = id;
this.username = username;
this.nickname = nickname;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
}
Department.java
package org.zttc.itat.model;
public class Department {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department(String name) {
this.name = name;
}
public Department() {
}
}
Role.java
package org.zttc.itat.model;
public class Role {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Role(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Role() {
super();
// TODO Auto-generated constructor stub
}
}
第三个包org.zttc.itat.test下 新建Junit测试类
TestOgnl.java
package org.zttc.itat.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ognl.Ognl;
import ognl.OgnlException;
import org.junit.Test;
import org.zttc.itat.model.Department;
import org.zttc.itat.model.Role;
import org.zttc.itat.model.User;
public class TestOgnl {
@Test
public void test01() {
try {
User u =new User(1,"tangshen","唐僧");
Department dep =new Department("财务处");
u.setDep(dep);
//第二个参数是root
System.out.println(Ognl.getValue("nickname", u));
System.out.println(Ognl.getValue("dep.name", u));
} catch (OgnlException e) {
e.printStackTrace();
}
}
@Test
public void test02() {
try {
Map<String,Object> ctx =new HashMap<String,Object> ();
User u =new User(1,"tangshen","唐僧");
Department dep =new Department("财务处");
u.setDep(dep);
Role r =new Role(1,"超级管理员");
ctx.put("user", u);
ctx.put("role", r);
//以下表达式是在root中找username。u是root,没加#在root中找,加#在map中找。
System.out.println(Ognl.getValue("username", ctx,u));
//以下表达式是在ctx这个map中找user.nickname。
System.out.println(Ognl.getValue("#user.nickname", ctx, u));
System.out.println(Ognl.getValue("#role.name", ctx, u));
//root是ctx,所以可以不用加#
System.out.println(Ognl.getValue("role.name", ctx, ctx));
System.out.println(Ognl.getValue("#root.username", ctx, u));
} catch (OgnlException e) {
e.printStackTrace();
}
}
@Test
public void test03() {
try {
List<User> users =new ArrayList<User>();
users.add(new User(1,"ts","唐僧"));
users.add(new User(2,"ss","沙僧"));
users.add(new User(3,"bj","八戒"));
users.add(new User(4,"wk","悟空"));
//root是list,如何取?如下
System.out.println(Ognl.getValue("#root[0].nickname", users));
} catch (OgnlException e) {
e.printStackTrace();
}
}
@Test
public void test04() {
try {
List<User> users =new ArrayList<User>();
users.add(new User(1,"ts","唐僧"));
users.add(new User(2,"ss","沙僧"));
users.add(new User(3,"bj","八戒"));
users.add(new User(4,"wk","悟空"));
//root是list,如何取?如下
System.out.println(Ognl.getValue("#root[0].nickname", users));
//Ognl还可以完成方法的调用
System.out.println(Ognl.getValue("#root[0].sum(1,3)", users));
User u =new User();
System.out.println(Ognl.getValue("hello(',world!')", u));
//users这个list是root,所以可以用list的get()方法获取某个下标的对象,然后完成导航
System.out.println(Ognl.getValue("get(3).nickname", users));
} catch (OgnlException e) {
e.printStackTrace();
}
}
}