zoukankan      html  css  js  c++  java
  • Struts(十):OGNL表达式(一)

    • Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值:

    I、值栈中的属性值:
      1、对象栈:读取对象栈中的某一个对象的属性值;
      2、Map栈 :request,session,application的一个属性值或一个请求参数的值。

    II、读取对象栈(ObjectStack)中的对象属性:
      1、若想读取Object Stack里的某个对象的属性,可以通过以下集中形式之一:
        object.propertyname
        object['propertyname']
        object["propertyname"]
      2、ObjectStack中的对象可以从0开始的的下表来引用,ObjectStack里的栈顶对象可以用[0]来引用,它下面的那个对象可以用[1]引用。
        [0].message
      3、[n]的含义是从第n个开始搜索,而不是值搜索第n个对象
      4、若从栈顶对象开始搜索,则可以省略下标部分:message
      5、结合s:property标签<s:property value="[0].message" />或者 <s:property value="message"/>(通常情况下都采用这种方式来写)

    <%@ taglib prefix="s" uri="/struts-tags"%>

    备注:如果需要使用s:property标签,必须在jsp页面头部引入:

    III、默认情况下,action会被struts2自动放在值栈的顶部。

    • 值栈属性读取示例:

     基于《Struts(九):值栈(OGNL)》这一篇文章的例子基础上,修改details.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!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>
    
    <s:debug/>
    
    <s:property value="productName"/><br/>
    ${productDesc}<br/>
    ${productPrice}<br/>
    
    </body>
    </html>

    调试启动tomcat,输入地址:http://localhost:8080/Struts_01/,页面:

    点击“提交”按钮,跳转到details.jsp

    点开[Debug]

    这里边的com.dx.sturts2.valuestack.Product存储的对象就是Action,被存储到了ValueStack的栈顶,所以details.jsp页面可以使用${productDesc},相当于<s:property value="[0].productDesc"/> 也相当于<s:property value="productDesc"/>

    添加一个Product2.java:

     1 package com.dx.struts2.valuestack;
     2 
     3 
     4 public class Product2 {
     5     private String productName;
     6     private String productDesc;
     7 
     8     public String getProductName() {
     9         return productName;
    10     }
    11 
    12     public void setProductName(String productName) {
    13         this.productName = productName;
    14     }
    15 
    16     public String getProductDesc() {
    17         return productDesc;
    18     }
    19 
    20     public void setProductDesc(String productDesc) {
    21         this.productDesc = productDesc;
    22     }
    23 
    24 }
    View Code

    修改Product.java Action save方法:

    public String save(){     
            System.out.println("save");
            
            // 1、获取值栈对象
            ValueStack valueStack= ActionContext.getContext().getValueStack();
                    
            // 2、生成一个Product2对象
            Product2 product2=new Product2();
            product2.setProductDesc("product2 desc");
            product2.setProductName("product2 name");
            
            // 3、将Product2对象存放到值栈中
            valueStack.push(product2);
            
            return "success";
        }

    继续查看details.jsp:

    调试Product的save方法:

    从截图我们可以知道:Action类对象在进入save方法之前就已经被放入到栈顶。

    details.jsp:

    点开[Debug]

  • 相关阅读:
    Modbus: 1. Java使用Modbus读取Slave端数据(TCP)
    Nodejs后台发送https请求验证证书
    Cocos2d-JS: 2.编译到安卓和iOS
    Cocos2d-JS: 1.环境搭建
    [转载]聪明人为什么不统治世界——从围棋到德州扑克
    [转载] 国内外GIS方面的网站(较全)
    [转载]土豪算法(笑话也是实话)
    [转载]混沌理论三原则
    [转]追MM的各种算法
    [转载]建筑美和数学美
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/6538147.html
Copyright © 2011-2022 走看看