OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言。
OGNL的引入
1.ognl访问数据,以下将几种获取方式做了示例:
Action类
public String test(){ //获取狭义上的值栈 context=ActionContext.getContext(); ValueStack valueStack=context.getValueStack(); valueStack.set("name", "张三(valueStack)中的"); //获取广义上的值栈 //获取reqeust中的 Map<String, Object> reqeust=(Map<String, Object>) context.get("request"); reqeust.put("name", "李四(reqeust)中的"); //获取session中的数据 Map<String, Object> session=context.getSession(); session.put("name", "王五(session)中的"); //获取session中的数据 Map<String, Object> application=context.getApplication(); application.put("name", "赵六(application)中的"); return SUCCESS; }
JSP页面
<body> 获取侠义上的值栈数据: <s:property value="name" /><br> 获取广义上的值栈数据<br> 获取请求的参数数据: <s:property value="#parameters.name" /><br> 获取reqeust中的数据: <s:property value="#request.name" /><br> 获取session中的数据: <s:property value="#session.name" /><br> 获取application中的数据: <s:property value="#application.name" /><br> #attr 按照 page,reqeust,session,application顺序查找<br> 获取attr:<s:property value="#attr.name" /> </body>
显示结果
2.ognl访问复杂对象:
Action类
public String test(){ //访问javaBean对象 student=new Students("张三","15"); //访问对象集合 list=new ArrayList<Students>(); list.add(new Students("李四","集合成员一")); list.add(new Students("王五","集合成员二")); //访问map对象 studentMap=new HashMap<String,Students>(); studentMap.put("好学生", new Students("学霸","20")); studentMap.put("差学生", new Students("学渣","20")); return SUCCESS; }
JSP页面
<body> OGNL访问javaBean对象: <s:property value="student.name" />,<s:property value="student.age" />岁了</br> OGNL访问对象List集合: <s:property value="list[0].name" />,<s:property value="list[0].age" /><br> <s:property value="list[1].name" />,<s:property value="list[1].age" /><br> OGNL访问对象Map集合: <s:property value="studentMap[‘好学生‘].name" />,<s:property value="studentMap[‘好学生‘].age" />岁了<br> <s:property value="studentMap[‘差学生‘].name" />,<s:property value="studentMap[‘差学生‘].age" />岁了<br> <!-- [‘好学生‘]这里面是map中的key值 --> </body>
显示结果:
2.ognl访问静态属性和方法:
创建一个静态类:
package com.maya.ognl; public class StaticOgnl { public static String str="Answer"; public static String printStr(){ str+="这是我的静态方法"; System.out.println(str); return str; } }
JSP页面访问静态属性与方法:
<body> OGNL访问静态属性: <s:property value="@[email protected]" /><br> <!-- @包名加类名 @属性名 --> OGNL访问静态方法: <s:property value="@[email protected]()" /> <!-- @包名加类名 @方法名() --> </body>
显示结果:
当访问静态方法与属性时,要在xml文件中配置一条语句,用来允许其调用。语句如下:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
时间: 2024-10-12 16:01:41