• struts2 day03


    本节内容:

    1.ognl概述

    2.ognl入门案例

    3.值栈

    4.如何获取值栈对象

    5.值栈内部结构

    6.往值栈中存储数据

    7.取值值栈中的数据

    一、OGNL概述:

        1.在web阶段我们学习过EL表达式,EL表达式,在jsp中获取域对象中的值。

        2.OGNL是一种表达式,这个表达式功能更强大。

         OGNL在Struts2中操作值栈数据

        一般OGNl和Struts2的标签一起使用操作值栈数据

      OGNL不是Struts2的一部分,他是一个单独的项目,经常和Struts2一起使用

      使用OGNL:首先导入jar包,但是Struts2提供了jar包

    二、OGNL入门案例:

      使用OGNL+struts2标签实现计算字符串长度

      OGNL支持对象方法调用

    操作步骤:我们需要在jsp页面引入struts2的标签

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

    ognl与struts2中的一个标签:property

      <%--value中就写OGNL表达式--%>
       <s:property value="'hello'.length()"></s:property>

    三、值栈:

    什么是值栈

    1.在我们学习web的时候,我们通常使用域对象在servlet中进行数据的保存,在jsp使用el表达式来取值

    2.在struts2中提供的一种存储机制,类似于域对象,是值栈,可以存值与取值

         我们在action中把数据存储到值栈中,在页面中获取值栈数据

    3.servlet与Action的区别:

      1.Servlet:默认在第一次访问时创建,只创建一次

      2.Action:访问时创建,每次访问action时候,都会创建action对象,创建多次,是多实例的

    值栈存储位置:

    (1).每次访问action时候,都会创建一个action对象,

     (2).在每个action对象中都会存在一个值栈对象。

    四、获取值栈对象

       1.获取值栈对象的方式:

        常用方式:   使用ActionContext类里面的方法得到值栈对象

       

    //        获取值栈对象
            //        获取ActionContext对象
            ActionContext actionContext = ActionContext.getContext ();
    //值栈对象
            ValueStack valueStack = actionContext.getValueStack ();

    五、值栈的内部结构:

     值栈分为2部分:

    第一部分root  :结构是list    一般都是操作root中的数据

    第二部分context:结构是map

    六、向值栈存储数据

    值栈存储数据的方式:

    1.获取值栈对象,调用值栈对象里面的set方法

        //获取值栈对象
            // 获取ActionContext对象
            ActionContext actionContext = ActionContext.getContext ();
            //值栈对象
            ValueStack valueStack = actionContext.getValueStack ();
    
            valueStack.set ("key","value");

    2.获取值栈对象,调用值栈对象里面的push方法

     valueStack.push ("value");

    3.在action中定义变量生成变量的get方法。(重点)

    package com.struts.action;
    
    public class ValueStackAction {
    
       //定义变量
        private String name;
    
        //生成变量的get方法
    
    
        public String getName() {
            return name;
        }
    
    
        public String show()throws  Exception{
           //在action方法中向变量设置值
            name="value";
    
            return "success";
        }
    }

    存储对象

    步骤:1.定义对象变量

              2.生成get方法

             3.向对象设置值

            

    package com.struts.action;
    
    public class ValueStackActionObject {
    
        //定义对象
        private  User user = new User ();
        //生成get方法
        public User getUser() {
            return user;
        }
    
        public String show(){
    
            user.setUsername ("小明");
            user.setAge (12);
            user.setPwd ("123456");
    
    
    
            return "success";
        }
    }
    View Code

    存储list集合

    定义list集合的变量

    生成变量的get方法

    设置集合的值

    package com.struts.action;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ValueStackActionList {
    
        //定义对象
        private List<User> list  = new ArrayList<User> ();
        //生成get方法
    
    
        public List<User> getList() {
            return list;
        }
    
        public String show(){
    
            User user = new User ();
            user.setUsername ("小明");
            user.setAge (12);
            user.setPwd ("123456");
            User user1 = new User ();
            user1.setUsername ("小王");
            user1.setAge (13);
            user1.setPwd ("1234567");
             list.add (user);
            list.add (user1);
            return "success";
        }
    }
    View Code

    七、从值栈中获取数据

    使用struts2标签+ognl表达式获取值栈数据

     <s:property value="ognl表达式"></s:property>

    获取字符串数据

    package com.struts.action;
    
    public class ValueStackAction {
    
    
        private String username;
    
        //生成变量的get方法
    
    
        public String getUsername() {
            return username;
        }
    
        public String show()throws  Exception{
           //在action方法中向变量设置值
            username="小王";
    
            return "success";
        }
    }
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
     <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <%--&lt;%&ndash;value中就写OGNL表达式&ndash;%&gt;--%>
       <%--<s:property value="'hello'.length()"></s:property>--%>
       <s:property value="username"></s:property>
      </body>
    </html>

    获取对象

    package com.struts.action;
    
    public class ValueStackActionObject {
    
        //定义对象
        private  User user = new User ();
        //生成get方法
        public User getUser() {
            return user;
        }
    
        public String show(){
    
            user.setUsername ("小明");
            user.setAge (12);
            user.setPwd ("123456");
            return "success";
        }
    }
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
     <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <%--&lt;%&ndash;value中就写OGNL表达式&ndash;%&gt;--%>
       <%--<s:property value="'hello'.length()"></s:property>--%>
        <%--获取字符串--%>
       <s:property value="username"></s:property>
    
      <%--获取对象  对象.属性--%>
      <s:property value="user.username"></s:property>
      </body>
    </html>

    获取list集合

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
     <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <%--&lt;%&ndash;value中就写OGNL表达式&ndash;%&gt;--%>
       <%--<s:property value="'hello'.length()"></s:property>--%>
        <%--获取字符串--%>
       <s:property value="username"></s:property>
    
      <%--获取对象  对象.属性--%>
      <s:property value="user.username"></s:property>
    
      <%--获取集合list中的数据--%>
        <%--第一种方式--%>
        <s:property value="list[0].username"></s:property>
        <s:property value="list[1].username"></s:property>
    
        <%--第二种方式  使用struts2中的迭代标签--%>
      <s:iterator value="list">
    
          <s:property value="username"></s:property>
    
      </s:iterator>
    <%--第三中方式   遍历list集合,得到每个user对象
        把每次遍历出来的user对象放到context里面获取context里面数据的特点
        写ognl表达式:使用特殊符号:#--%>
        <s:iterator value="list" var="user">
    
            <s:property value="#user.username"></s:property>
    
        </s:iterator>
    
      </body>
    </html>

    获取set向值栈添加的数据

        ActionContext actionContext = ActionContext.getContext ();
            //值栈对象
            ValueStack valueStack = actionContext.getValueStack ();
    
            valueStack.set ("key","value");
     
        <%--set方式存储的数据获取 根据名字取值--%>
      
        <s:property value="key"></s:property>

    获取push向值栈中添加的数据

        valueStack.push ("value");

    使用push方法设置值,没有名称,只有设置的值

    向值栈放数据,把向值栈的数据存到数组中,数组的名称top根据数组获取

        <%--push方式存储的数据获取 根据数组获取--%>
    
        <s:property value="[0].top"></s:property>

    EL表达式与JSTL也可以获取到值栈中的数据

  • 相关阅读:
    PyQt5对话框
    PyQt5基础控件
    PyQt5主界面
    PyQt5入门
    ioctl太多虚拟内存不够用
    code principles
    Error: watch ENOSPC
    intelJ
    cas
    C的函数指针的作用,以及其赋值是弱类型的
  • 原文地址:https://www.cnblogs.com/wuzhilong/p/9924189.html
Copyright © 2020-2023  润新知