8.struts2_OGNL

来源:互联网 发布:u盘在mac上什么都没有 编辑:程序博客网 时间:2024/05/21 08:36

1.关于值栈
1)helloworld时,${productName}读取productName时,实际上属性并不在request等域中,而是从值栈中读取。
2)ValueStack: 可以从ActionContext中获取值栈对象
  其分为两个逻辑部分>Map栈:实际上是OgnlContext类型,是一个Map,ActionContext的引用,里面保存呢这
  各种Map,如sessionMap,requestMap等。
  >对象栈:CompoundRoot类型,是一个使用ArrayList定义的栈,存储各种当前Action实例相关
2.Struts2使用s:property标签 和ognl表达式来读取值栈中的属性值。
1)值栈中的属性值: 对象栈>某一对象的属性值;;Map栈>request,session,applicaion,属性值或请求参数值

使用ognl时,导入struts2标签:

<span style="white-space:pre"></span><%@ taglib prefix="s" uri="/struts-tags" %>

使用debug标签可以方便开发者查看值栈中的情况

                <s:debug></s:debug>



页面实例:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'details.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>    <s:debug></s:debug>  ProductName :<s:property value="[1].productName"/>  <br>    ProductDesc :<s:property value="[1].productDesc"/> <br>      ProductPrice :${productPrice} <br>      productPrice:<s:property value="[0].productPrice"/> <br>     <br><br>     ProductName1: ${sessionScope.product.productName }     <!-- 读取Map栈里的数据,存在request等对象里的值 -->     <s:property value="#session.product.productName"/>     <br><br>       ProductName2: ${requestScope.test.productName }     <br><b>     <!-- 使用OGNL调用public类静态方法 -->     <s:property value="@java.lang.Math@PI"/>     <br><b>     <s:property value="@java.lang.Math@cos(0)"/>     <!-- 调用对象栈的方法 -->     <s:property value="setProductName('hcx')"/>     <br>     <s:property value="productName"/><br>     <!-- 调用数组对象的属性 -->     <%     String [] names = new String[]{"aa","bb","cc"};     request.setAttribute("names",names);      %>      length:<s:property value="#attr.names.length"/>      <br>      names[2]:<s:property value="#attr.names[2]"/>       <br><br>      <%      Map<String,String> letters= new HashMap<String,String>();        letters.put("AA","a");      request.setAttribute("letters",letters);             %>       <!--使用ognl访问map  -->      Map大小: <s:property value="#attr.letters.size"/>      <br><s:property value="#attr.letters['AA']"/>  </body></html>



0 0