(15)Struts2_OGNL读取Object栈

Struts2_OGNL

利用 s:property 标签和 OGNL 表达式来读取值栈中的属性值

1). 值栈中的属性值:

  • 对象栈: 对象栈中某一个对象的属性值
  • Map 栈: request, session, application 的一个属性值 或 一个请求参数的值.

读取对象栈中对象的属性:

1.若想访问 Object Stack 里的某个对象的属性. 可以使用以下几种形式之一:

  • object.propertyName ; object[‘propertyName’] ; object[“propertyName”]

2.ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用, 它下面的那个对象可以用 [1] 引用.

  • [0].message
  • 若在指定的对象里没有找到指定的属性, 则到指定对象的下一个对象里继续搜索. 即 [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象

3.若从栈顶对象开始搜索, 则可以省略下标部分: message

  • 结合 s:property 标签: <s:property value="[0].message" /> <s:property value="message" />


默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶.


编码:

同时借用helloworld中的代码:

Show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
        <s:debug></s:debug>
      ID:${id}<br>
          编号:${ dlh}<br>
       姓名:${ name}<br>
       部门:${ bmmc}<br>
      name:<%=request.getAttribute("name") %><br>
      name:<s:property value="name"/><br>
      name[0]:<s:property value="[0].name"/><br>
  </body>
</html>

此时我们在action方法中手动压入一个对象:

GG_CZY.java

    public String save() {
        if(this.id==null){
            this.id = UUID.randomUUID().toString().replace("-", "");
        }

        //1.获取值栈
        ValueStack stack = ActionContext.getContext().getValueStack();

        //2.给新对象复制
        GG_CZY czy = new GG_CZY();
        czy.setName("王小二");
        czy.setBmmc("放牛");

        //3将新对象压入值栈中
        stack.push(czy);

        return "save";
    }

Show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
        <s:debug></s:debug>
      ID:${id}<br>
          编号:${ dlh}<br>
       姓名:${ name}<br>
       部门:${ bmmc}<br>
      name:<%=request.getAttribute("name") %><br>
      name:<s:property value="name"/><br>
      name[0]:<s:property value="[0].name"/><br>
      name[1]:<s:property value="[1].name"/><br>
  </body>
</html>


注意事项

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞雪无情的博客

Go语言实战笔记(九)| Go 接口

接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型如int、map、slice等不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但...

11640
来自专栏程序员互动联盟

【编程基础】如何了解c语言中的位运算?

计算机的各种运算最小单位是字节,但是有时候只对某个位(bit)感兴趣,C语言提供了一些列位运算符来完成这个任务。这些操作非常重要,尤其是在嵌入式开发中会常常用到...

47050
来自专栏JavaEdge

深入理解JDK动态代理机制

34160
来自专栏Golang语言社区

Golang语言之异常处理

在编写Go语言代码的时候,我们应该习惯使用error类型值来表明非正常的状态。作为惯用法,在Go语言标准库代码包中的很多函数和方法也会以返回error类型值来表...

362130
来自专栏james大数据架构

NET中验证控件表达式汇总

ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效。这些控件如下:     1、RequiredFieldValidator:验证...

245100
来自专栏xingoo, 一个梦想做发明家的程序员

套接口编程

1 struct in_addr{ 2 in_addr_t s_addr; 3 }; 4 struct sockaddr_in{ 5 ...

21680
来自专栏CreateAMind

coach运行流程梳理

12320
来自专栏闻道于事

Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File

java.lang  类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口:...

40460
来自专栏web前端教室

重学javascript 红皮高程(3)

继续啊,继续JS基础知识补全之路。 昨天说到JS的几种数据类型,像我这种脑子不太好使,记不清JS共有几种对象的人,可以这么记,JS这东西根本不支持自定义类型,所...

23290
来自专栏十月梦想

构建函数(class)创建对象,对象属性新增和修改

构建函数创建对象类似函数,内部的属性方法用分号分离,json创建的对象各类属性方法用逗号可开

6220

扫码关注云+社区

领取腾讯云代金券