博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(八)Struts2中的参数封装
阅读量:6836 次
发布时间:2019-06-26

本文共 4411 字,大约阅读时间需要 14 分钟。

一、静态参数封装

什么是静态参数? 

静态参数就是硬编码的,不可随意改变。

例子:

(1)我们首先创建一个Action类,里面有两个参数,用来封装请求参数

 

public class User extends ActionSupport {            private String username;    //用户名            private int age;           //年龄            public String getUsername() {                return username;            }            public void setUsername(String username) {                this.username = username;            }            public int getAge() {                return age;            }            public void setAge(int age) {                this.age = age;            }            public String adduser(){                 System.out.println(username+":"+age);                return null;            }        }

 

(2)我们在struts.xml中配置静态参数,我们访问action1动作时,会输出 张三:18

张三
18

(3)原理

我们在struts2的运行流程中提到过,我们动作类的动作方法执行之前,会有一系列的拦截器帮我们执行一些操作。         在struts-default.xml中,有很多拦截器,拦截器又分为很多拦截器栈,我们默认是使用defaultStack的拦截器栈。          这个拦截器栈中有一个叫做staticParams的拦截器帮我们完成静态参数的封装,将配置的静态方法通过action类中的set方法设置进去。

 

 

 

二、动态参数封装

什么是动态参数?

像我们用表单提交的数据,就是动态数据。数据是可变的 例子: (1)第一步:我们先创建一个添加用户的表单
用户名:
年 龄:
(2)第一种方式:数据参数和动作类写在一起 要求是表单中的name必须和我们类中的set方法后面的名称一致,例如表单中的username对应类中的setUsername,和参数并没有太大关系,和set方法有关系。
public class User extends ActionSupport {                    private String username;                    private int age;                    public String getUsername() {                        return username;                    }                    public void setUsername(String username) {                        this.username = username;                    }                    public int getAge() {                        return age;                    }                    public void setAge(int age) {                        this.age = age;                    }                    public String adduser(){                         System.out.println(username+":"+age);                        return null;                    }                }

(3)配置struts.xml文件  

 

 

 

这一系列操作是由拦截器栈中的名为params的拦截器帮我们完成的

上面这种方式将参数和动作类写在一起,看起来太过混乱,我们能不能用一个JavaBean将参数给封装起来。 答案是能。

 第二种方式,将参数数据和动作类分开写

  (1)第一步,我们创建一个javaBean,User类,用来封装请求参数

public class User  implements Serializable{                    private String username;                    private int age;                    public String getUsername() {                        return username;                    }                    public void setUsername(String username) {                        this.username = username;                    }                    public int getAge() {                        return age;                    }                    public void setAge(int age) {                        this.age = age;                    }                }

  (2)第二步:创建一个添加用户的动作类,里面有一个user对象

  

public class AdduserAction extends ActionSupport {                    private User user;                    public User getUser() {                        return user;                    }                    public void setUser(User user) {                        this.user = user;                    }                    public String adduser(){                        System.out.println(user.getUsername()+":"+user.getAge());                        return null;                    }                }

(3)第三步:我们得改变一些我们的jsp页面的写法,因为表单的name要和类中的数据相对应,但类中只有一个user ,username去找动作类中的setUsername,肯定找不到。 我们这样写,他就会先找类中的user对象,然后去找user对象的username和age  

  

                    
用户名:
年 龄:

 原理:

这一系列操作还是拦截器params帮我们完成。我们在getUser和setUser里打印两句话来看看他到底是怎么执行的                public User getUser() {                    System.out.println("getuser");                    return user;                }                public void setUser(User user) {                     System.out.println("setuser");                    this.user = user;                }                 输出                getuser   :先判断对象是否存在                setuser   :如果判断不存在,调用set方法,通过反射创建一个对象,并且设置给该类                   getuser   :然后再获取该对象,调用该对象的get和set方法对参数赋值

  

 

 

转载于:https://www.cnblogs.com/yuexiaoyun/p/9448129.html

你可能感兴趣的文章
php URLEncode() / php URLEncode函数 php urldecode...
查看>>
knn 分类
查看>>
weblogic Java反序列化漏洞测试和解决
查看>>
svn高可用集群搭建
查看>>
设计模式6大原则:里氏置换原则
查看>>
实现HTTPS系列第五弹(终章)之【通过OpenSSL实现HTTPS】
查看>>
Linux防火墙
查看>>
如何通过一个值查找到值所在的SQL数据库表
查看>>
Python学习—面向对象学习上
查看>>
3.9 对称三位素数
查看>>
Oracle临时表空间使用分析
查看>>
傻瓜式的ARP处理方法
查看>>
Django1.4 python2.7 apache mod_python 安装与部署实例
查看>>
浅析MySql二进制日志的应用
查看>>
tcc新的插装引擎对比原有实现的改进
查看>>
layoutSubviews何时调用的问题
查看>>
Java数据类型
查看>>
[转] 配置VNC
查看>>
unity使用UGUI创建摇杆
查看>>
实习小白::(转) 使用Tui-x制作cocos能使用的界面,动画等 ---------- Tui-x 简介...
查看>>