• 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的接口所以模型封装只会封装一个到一个实体类中

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

    值栈

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

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

  • 相关阅读:
    python字典实现原理-哈希函数-解决哈希冲突方法
    ElasticSearch-倒排索引
    ElasticSearch-核心概念
    MarkdownPad2基础语法
    下载python3.6,进行编译安装,运行django程序
    linux-指令1
    注解和反射
    Htlm和Css
    JAVASE加强
    网络编程
  • 原文地址:https://www.cnblogs.com/cqc666/p/7732181.html
Copyright © 2020-2023  润新知