浅析struts2中的OGNL对象-图导航语言应用

一、什么是OGNL?在什么情况下使用OGNL?OGNL怎么使用?

OGNLObject-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言。

1.可以访问ContextMap中的数据。
给OGNL表达式加上一个前缀字符#。如果没有前缀字符#,搜索将在ObjectStack里进行

2 .在JSP页面怎么访问ContextMap中的数据呢?

第一步:在JSP页面中引入struts2的标签文件,标签格式如下:

<%@taglib prefix="s" uri="/struts-tags" %>

第二步:结合<s:property>标签中的value属性读取ContextMap中的数据,如果开发人员要读某个具体数据建议把<s:debug></s:debug>标签导入进来方便查询值。格式如下:

<s:property value="#user.name"/> 读取用户对象的用户名 

<s:property value="#user['name']> 读取用户对象的用户名

<s:property value="#user["name"]/> 读取用户对象的用户名

以上三种都是一个意思,可以根据个人喜好使用固定的方式,页面风格要统一。笔者习惯第一种方式

那么,不同请求域中如何获取呢?代码如下:

<s:property value="#session.code"/>返回session中的code属性

<s:property value="#request.code"/>返回request中的customer属性的name属性值

<s:property value="#attr.code"/>返回域对象(按request,session,application的顺序)的lastAccessDate属性

3.使用OGNL调用public类的public类型的静态字段和静态方法?

第一步:在struts.xml配置文件中添加一个常量设置,常量引用的名称是struts.ognl.allowStaticMethodAccess,其默认值是false(即关闭)。打开方式在package节点下添加一个常量子节点,形式如下:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> 打开静态方法调用的限制

注意:如果我们只调用public类型的静态字段是不需要第一步的。

第二步:使用OGNL怎么调用,具体格式如下:

1.调用静态字段

<s:property value="@java.lang.Math@PI"/>

2.调用静态方法

<s:property value="@java.lang.Math@cos(0)"/>

3.调用对象栈的方法为一个属性赋值

<s:property value="setProductName('atguigu')"/>

 <s:property value="productName"/>

4.访问数组类型的属性,JSP页面中代码如下:

 <%
  string[] names = new String[] {"aa","bb"}
  request.setAttribute("name",names);
 %>
 
  length:<s:property value="#attr.names.length" />

  names[2]:<s:property value="#attr.names[
1]"/>

5.使用OGNL访问Map,JSP页面代码如下:

  <%
  Map<String,String> letters = new HashMap<String,String>();
  request.setAttribute("letters",letters)
  letters.put("AA","a");
  letters.put("BB","b");
  letters.put("CC","c");
  %>
 
 <s:property value="#attr.letters.size"/>
 
  <s:property value="attr.letters['AA']"/>
访问letters中名称为AA对应的值

6.访问值栈中对象的属性

 <s:property value="fieldName">

也可以用EL表达式获取${fieldName}

二、关于OGNL与EL表达式的应用建议?

  如果只单纯的获取某个值建议使用EL表达式,但是如果工程中引入了struts2框架的话,要想页面代码风格统一的话建议使用OGNL。

你可能感兴趣的:(标签,语言,Ognl,struts配置文件,struts2.0)