Struts2入门到精通四——————Ognl详解


一、

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















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值