Struts2_10_OGNL访问

在上一篇中,提到OGNL访问 ValueStack和ActionContext的数据,这一篇介绍其他的访问:

OGNL 访问复杂对象

1,访问 javaBean 对象; 2,访问集合对象; 3,访问 Map 对象;

OGNL 访问静态方法和属性

1,访问静态属性;

2,访问静态方法;<constantname="struts.ognl.allowStaticMethodAccess"value="true"></constant>


 OGNL 访问复杂对象


访问 javaBean 对象

建一个实体:student  属性有:name,age,生成get set  并弄一个name.和age 的构造方法。

在HelloAction中,添加javaBean:student 并在默认方法中new 一个对象。

	private Student student;
	
	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	@Override
	public String execute() throws Exception {
		
		this.student = new Student("张三", 12);
		return SUCCESS;
	}
获取javaBean对象:<s:property value="student.name"/><s:property value="student.age"/>

在页面获取javaBean对象:

访问集合对象

在HelloAction中,定义一个集合对象students  ,并在默认方法中实例化一个集合,并添加对象:

	private Student student;
	private List<Student> students;
	
	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	@Override
	public String execute() throws Exception {
		
		this.student = new Student("张三", 12);
		this.students = new ArrayList<Student>();
		this.students.add(new Student("李四", 13));
		this.students.add(new Student("王五", 14));
		return SUCCESS;
	}
	

在页面获取集合对象:

获取集合对象:<s:property value="students[0].name"/><s:property value="students[0].age"/><br/>
		 <s:property value="students[1].name"/><s:property value="students[1].age"/><br/>

访问Map对象:

在HelloAction中定义Map对象 studentMap,并在默认方法中实例化一个Map集合,添加数据。

	private Student student;
	private List<Student> students;
	private Map<String, Student> studentMap;
	
	public Map<String, Student> getStudentMap() {
		return studentMap;
	}

	public void setStudentMap(Map<String, Student> studentMap) {
		this.studentMap = studentMap;
	}

	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	@Override
	public String execute() throws Exception {
		
		this.student = new Student("张三", 12);
		this.students = new ArrayList<Student>();
		this.students.add(new Student("李四", 13));
		this.students.add(new Student("王五", 14));
		studentMap = new HashMap<String,Student>();
		studentMap.put("good",new Student("学霸",21));
		studentMap.put("bad",new Student("学渣",20));
		return SUCCESS; 
	}
	

在页面获取Map对象:

获取Map对象:<s:property value="studentMap['good'].name"/><s:property value="studentMap['good'].age"/><br/>
		 <s:property value="studentMap['bad'].name"/><s:property value="studentMap['bad'].age"/><br/>
</body>


OGNL 访问静态方法和属性

我们单独建一个专门放静态东西的包common

package com.java.common;

public class MyStatic {

	public static final String src="静态属性";
	public static void f() {
		System.out.println("静态方法");
	}
}

页面访问:

获取静态属性:<s:property value="@com.java.common.MyStatic@src"/><br/>

 

访问静态方法要改一下配置,默认是不允许获取静态方法的。

<struts>
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
	<package name="hello" extends="struts-default" >
		<action name="hello" class="com.java.action.HelloAction">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

页面获取静态方法:

获取静态方法:<s:property value="@com.java.common.MyStatic@f()"/><br/>

在控制台成功打印  "静态方法" 

猜你喜欢

转载自blog.csdn.net/qq_27163329/article/details/81603895