• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
陈大彘
博客园    首页    新随笔    联系   管理    订阅  订阅

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

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

 

值栈

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

 

 

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

posted @ 2017-10-25 20:29  陈大彘  阅读(245)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3