1. 程式人生 > >OGNL表示式(轉載) OGNL表示式

OGNL表示式(轉載) OGNL表示式

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="@
[email protected]
_VALUE"/> <hr/> <!-- d、訪問靜態方法 語法: @類的全路徑@靜態方法 注意: 使用靜態方法時,需要在struts.xml中開啟靜態方法呼叫的開關。 --> 輸出一個隨機數:<s:property value="@[email protected]()"/> <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>
複製程式碼

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="@[email protected]_VALUE"/>
    <hr/>
    <!-- d、訪問靜態方法
        語法:
            @類的全路徑@靜態方法
        注意:
            使用靜態方法時,需要在struts.xml中開啟靜態方法呼叫的開關。
     -->
    輸出一個隨機數:<s:property value="@[email protected]()"/>    
    <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>
複製程式碼