zoukankan      html  css  js  c++  java
  • Struts2 数据封装与值栈

          上次给大家讲了Struts2的环境搭配,那么今天呢就来给大家讲解Struts的数据封装与Struts的两大核心之一的值栈。

        数据封装又分为:属性封装、模型驱动、表达式封装三种类型

        在讲述数据封装之前要来有个jsp,这里呢我就只使用form表单

     jsp代码如下:

    1 <form action="loginadmin.action" method="post">
    2         用户名:<input name="name"> 密码:<input name="pwd" type="password">
    3         <input type="submit" value="提交">
    4     </form>

        1:属性封装

        2:模型驱动

            01:创建实体类(属性名必须和表单的name属性值一模一样);

            02:action实现ModelDriven接口; 

            03:实现ModelDriven接口的getModel方法 

                      private 实体类 实体类对象名 = new 实体类();
                      public 实体类 getModel() {
                      return 实体类对象名;
                  }

            04:使用实体类对象名即可

    action代码如下:

     1 package com.action;
     2 
     3 import com.entity.Elogin;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 import com.opensymphony.xwork2.ModelDriven;
     6 
     7 public class LoginAction extends ActionSupport implements ModelDriven<Elogin> {
     8 
     9     // @Override
    10     // public String execute() throws Exception {
    11     // System.out.println("AAAA");
    12     // return SUCCESS;
    13     // }
    14     //
    15 
    16     // 返回空值
    17     private Elogin elogin = new Elogin();
    18 
    19     public Elogin getElogin() {
    20         return elogin;
    21     }
    22 
    23     public void setElogin(Elogin elogin) {
    24         this.elogin = elogin;
    25     }
    26 
    27     public String admin() {
    28         System.out.println(elogin.getName() + "----" + elogin.getPwd());
    29         return SUCCESS;
    30     }
    31 
    32     @Override
    33     public Elogin getModel() {
    34         return elogin;
    35     }
    36 
    37 }

           

       3:表达式封装

              01:在Action类中声明实体类:

                      private 实体类 实体类对象名;

                     02:生成实体类对象名的set和get的方法

              03:修改表单那么属性值:

                       name="实体对象名.属性名"(users.username)

    action代码如下:

     1 package com.action;
     2 
     3 import com.entity.Elogin;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 import com.opensymphony.xwork2.ModelDriven;
     6 
     7 public class LoginAction extends ActionSupport implements ModelDriven<Elogin> {
     8 
     9     // @Override
    10     // public String execute() throws Exception {
    11     // System.out.println("AAAA");
    12     // return SUCCESS;
    13     // }
    14     //
    15 
    16     private Elogin elogin;
    17 
    18     public Elogin getElogin() {
    19         return elogin;
    20     }
    21 
    22     public void setElogin(Elogin elogin) {
    23         this.elogin = elogin;
    24     }
    25 
    26     /**
    27      * 
    28      * @Title: admin @Description: 模型驱动 @return @return String @throws
    29      */
    30     // // 返回空值
    31     // private Elogin elogin = new Elogin();
    32     //
    33     // public Elogin getElogin() {
    34     // return elogin;
    35     // }
    36     //
    37     // public void setElogin(Elogin elogin) {
    38     // this.elogin = elogin;
    39     // }
    40 
    41     public String admin() {
    42         System.out.println(elogin.getName() + "----" + elogin.getPwd());
    43         return SUCCESS;
    44     }
    45 
    46     @Override
    47     public Elogin getModel() {
    48         return elogin;
    49     }
    50 
    51 }

    注意:action中这里的Elogin不需要实例化,因为这中间有牵扯出反射了,这里反射就不解释了,有兴趣的朋友可以去度娘看看,

    action中改完之后还没完,因为你类里面改了那代表你的jsp页面里面也要做出相对应的处理,在属性之前需要用实体对象名.属性名不然他无法找到属性就会报错

    下面是jsp代码:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 
    11     <form action="loginadmin.action" method="post">
    12         用户名:<input name="elogin.name"> 密码:<input name="elogin.pwd"
    13             type="password"> <input type="submit" value="提交">
    14     </form>
    15 
    16 </body>
    17 </html>

    数据封装到这里就结束了,但是一定要注意以下几点:

    PS:在一个action中不能给对同一个表单使用属性封装和模型封装,如果使用只会执行模型驱动封装

    表达式封装和模型封装的相同点以及不同点:

    相同点:
    都可以把数据封装到实体类中

    不同点:
    模型封装只能够把数据封装到一个实体类中,在一个action里面只能实现一次ModelDriven的接口所以模型封装只会封装一个到一个实体类中

    表达式封装可以吧数据封装到多个对象中

    值栈

    朋友们因为因为值栈内容有点多,我就不一一列出了,我做了一张图片,个人觉得还是比较详细的,大家可以试着看一看,

    今天的内容到此结束,谢谢大家观请关注喔!

  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/cqc666/p/7732181.html
Copyright © 2011-2022 走看看