文章出處

一、OGNL全稱是Object Graph Navigation Language,即對象導航圖語言

 OGNL在框架中主要做兩件事情:表達式語言和類型轉換器

OGNL在框架中的作用以及數據的流入流出:

 


 

二、ValueStack值棧

定義:是內存中的一塊空間,棧和堆之外的空間,它具有棧的特征,可以存放多個對象,如果存放多個對象,他們是按照先后順序壓入堆棧的。框架在處理每個請求時,都會創建該請求對應的運行環境,這時會創建值棧和請求對應的Action實例,并將Action實例壓入值棧中  


 三、實現思路

可通過單列(Root)、雙列(Context)集合獲取ValueStack

單列集合:

創建Action類繼承自ActionSupport,首先通過ServletActionContext獲取到request對象,其次創建UserInfo對象,通過ValueStack對象的getRoot方法拿到UserInfo對象info

public class ValueStackAction extends ActionSupport {
    @Override
    public String execute() throws Exception {

        HttpServletRequest request = ServletActionContext.getRequest();
        ValueStack vs = (ValueStack) request.getAttribute("struts.valueStack");

        UserInfo info = new UserInfo();
        info.setUsername("呵呵");
        info.setPassword("12345");
            
        vs.getRoot().add(info);
        
        return SUCCESS;
    }

index.jsp頁面進行取數據:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
  </head>
  
  <body>
    valueStack
      <s:property value="username"/> 
   
    <s:debug></s:debug>
  </body>
</html>

 


雙列集合:

 

 

index.jsp頁面:需注意的是雙列集合通過#獲取數據

 

使用ognl表達式:

1)“#”符號有三種用途

a、訪問非根對象(struts中值棧為根對象),eg:OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性:

名稱   作用域 

eg:

1-1)parameters :包含當前HTTP請求參數的Map

#parameters.id[0]=>作用相當于request.getParameter("id")

 

1-2)request:包含當前HttpServletRequest的屬性(attribute)的Map

#request.userName=>作用相當于request.getAttribute("userName");

 

1-3)session:包含當前HttpSession屬性(attribute)的Map

#session.userName=>session.getAttribute("userName");

 

1-4)application:包含當前應用的ServletContext的屬性(attribute)的Map

#application.userName=>application.getAttribute("userName");

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()