一、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");
文章列表