OGNL表達式


1.什么是OGNL

   OGNL:Object Graphic Navigation Language(對象圖導航語言)

              它是Struts2中默認的表達式語言。使用表達式需要借助Struts2的標簽.

   OGNL與EL的區別:

              EL/JSTL 數學運算等等表達式: 都有一個明確的返回值,都只能取值。

     OGNL表達式: 它不僅可以取值,還可以賦值(賦值操作只能由Struts來完成)

   OGNL表達式的寫法:   屬性.屬性.屬性的方式   <input type="text" name="user.user"/>

   OGNL表達式的基本使用:

  •    使用s:property標簽輸出內容
  •    訪問普通方法
  •    訪問靜態方法
  •    訪問靜態屬性
  •    操作集合(List AND Map)
<title>Struts2OGNL表達式的基本使用</title>
</head>
<body>
    <!-- a、使用s:property標簽輸出內容:要想輸出內容到頁面得使用Struts2的標簽庫 
            value屬性:把value取值所對應的內容輸出到頁面
            若想直接輸出文本,則需要用引號引起來。
    -->
    輸出基本內容:<s:property value="'OGNLExpresession'"/>    
    <hr/>
    <!-- b、訪問普通方法     -->
    輸出字符串的長度:<s:property value="'OGNLExpresession'.length()"/>    <br/>
    輸出轉大寫字符:<s:property value="'OGNLExpresession'.toUpperCase()"/>    <br/>
    切割字符串:<s:property value="'OGNLExpresession'.split('L')"/>    
    <hr/>
    <!-- c、訪問靜態屬性 
        語法 :
            @類的全路徑@靜態字段
        -->
    輸出整數的最大值:<s:property value="@java.lang.Integer@MAX_VALUE"/>
    <hr/>
    <!-- d、訪問靜態方法
        語法:
            @類的全路徑@靜態方法
        注意:
            使用靜態方法時,需要在struts.xml中開啟靜態方法調用的開關。
     -->
    輸出一個隨機數:<s:property value="@java.lang.Math@random()"/>    
    <hr/>
    <!-- e、操作集合(List和Map)
        語法:
            聲明list集合:{"aa","bb"}
            聲明map集合:#{"key":"value","key":"value"}
         -->
    輸出html普通標簽的單選按鈕:<br/>
    <input type="radio" name="sex" value="男"/><input type="radio" name="sex" value="女"/><br/>
    使用Struts2標簽輸出單選按鈕:list集合方式<br/>
    <s:radio list="{'男','女'}" name="sex"></s:radio><br/>
    使用Struts2標簽輸出單選按鈕:map方式<br/>
    <s:radio list="#{'男':'男','女':'女' }" name="sex"/>
    
    
    
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    使用EL表達式:<br/>
    ${c.username}<br/>
    ${requestScope.p }<br/>
    ${sessionScope.p }<br/>
    ${applicationScope.p }<br/>
    <hr/>
    使用OGNL表達式:<br/>
    <!-- 如果是在action動作類中直接聲明的變量,OGNL直接取值即可。 -->
    <!-- 在域對象中的數據需要使用#開頭 -->
    <!-- 
        注:如果對象在action動作類中直接聲明,則取值需要使用c.username
              如果對象在方法中手動添加到valueStack對象中,則取值不需要c.username,直接username即可。
     -->
    <s:property value="c.username"/><br/>
    <%-- <s:property value="[1].username"/><br/> --%>
    <s:property value="#request.p"/><br/>
    <s:property value="#session.p"/><br/>
    <s:property value="#application.p"/><br/>
    <s:property value="#attr.p"/><br/>
    <hr/>
    <!-- 不寫value屬性:獲得的是棧頂數據 -->
    <s:property/>
    <s:debug/>
</body>
</html>
<%@page import="com.opensymphony.xwork2.util.ValueStack"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 在頁面查看調試信息 -->
${ username}<br/>
    <s:debug/>
    <s:property value="username"/><br/> == vs.findValue("username");
    <s:property value="[1].username"/><br/>
    <s:property value="#session.p"/><br/>
    <s:property value="#application.p"/>
    <hr/>
    <%
        
        ActionContext ac = ActionContext.getContext();
        ValueStack vs  = ac.getValueStack();
        String name = (String)vs.findValue("username");
        out.print(name);
        String p = (String)vs.findValue("#session.p");
        out.print(p);
    %>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM