OGNL的簡單使用

1.什麼是OGNL

OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個單獨的開源項目。 Struts2框架使用OGNL作爲默認的表達式語言。

2.OGNL功能

前提: OGNL是struts2整合的一個開源項目,所以在struts2中,要想使用OGNL表達式,必須使用Struts2標籤庫

2.1 OGNL方法的調用

jsp界面引用

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

body中

<%--OGNL表達式:它可以訪問普通方法 
        OGNL表達式必須寫在struts2的標籤中
        s:property它就類似於jsp的表達式,把值輸出到瀏覽器上

        value屬性中的內容不再是我們看到的字符串,它是一個OGNL表達式。必須知道
        如果想讓他變成一個普通的字符串,在值外面套上單引號
    --%>
    <s:property value="OGNL-Expression"/> 這是一個OGNL表達式<br/>
    <s:property value="'OGNL-Expression'"/>這是一個普通的字符串<br/>
    <s:property value="'OGNL-Expression'.length()"/>使用普通字符串調用了獲取長度的方法
    <hr/>
    <%--OGNL訪問靜態屬性: 
        訪問靜態屬性的方式:@全類名@靜態屬性名稱
    --%>
    <s:property value="@java.lang.Integer@MAX_VALUE" /><br/>
    <%--OGNL訪問靜態方法:
        訪問靜態方法的方式:@全類名@靜態方法名
        struts2的框架默認是禁用靜態方法調用的。我們可以通過配置開啓。
        struts.ognl.allowStaticMethodAccess=false把它改爲true
    --%>
    <s:property value="@java.lang.Math@random()" />
    <hr/>
    <%--OGNL操作map和List --%>
    <%-- 使用的是s:radio的標籤,創建list集合
         {}就相當於創建了一個list集合
         list屬性中的取值是一個OGNL表達式
     --%>
    <s:radio name="gender" list="{'男','女'}"></s:radio><br/>

    <%--使用s:radio創建一個map 
        #{}表示創建一個map
        10作爲value給raido標籤的value屬性賦值
        男和女作爲key,顯示到頁面的內容
    --%>
    <s:radio name="gender1" list="#{'1':'男','0':'女'}" />

當訪問靜態方法時,需要在struts.xml中進行配置

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

3.EL表達式的自定義方法

1 編寫一個普通類,提供一個實現功能的靜態方法

package jxust.simon.web.function;

public class MyFunction {
    public static String toUpperCase(String str){
        return str.toUpperCase();
    }
}

2 在WEB-INF目錄中創建一個擴展名爲.tld的xml文件.文件不能放在classes和lib目錄中

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version><!-- 指定標籤庫或方法庫版本號 -->
    <short-name>myfn</short-name><!-- 使用的短名稱。對應的是taglib指令中的prefix -->
    <!-- uri:把當前的方法庫綁定到一個uri地址上,在該網址上不一定存在方法庫 -->
    <uri>http://www.baidu.com/functions/myfunction</uri>
    <function><!-- 自定義方法 -->
        <name>touppoercase</name><!-- 方法的名稱,是jsp頁面上使用的名稱 -->
        <!-- 指定執行的類 -->
        <function-class>jxust.simon.web.function.MyFunction</function-class>
        <!-- 指定執行的方法。方法名稱必須和類中的方法名稱保持一致
            注意:當方法有參數和返回值時:參數和返回值必須寫類全名(除了基本數據類型)
        -->
        <function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
    </function>
</taglib>

3 在jsp頁面中使用taglib指令引入外部的標籤庫/方法庫

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.baidu.com/functions/myfunction" prefix="myfn" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>ONGL-Expression</title>
  </head>

  <body>
    <%--EL表達式 --%>
    afghdsf轉成大寫<br/>
    ${myfn:touppoercase("afhdsf")}<br>
  </body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章