在上一篇中,提到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 ,并在默认方法中实例化一个集合,并添加对象:
扫描二维码关注公众号,回复:
2754267 查看本文章
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/>
在控制台成功打印 "静态方法"