一、静态参数封装

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

例子:

(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

            <package name="p1" extends="struts-default">
<action name="action1" class="com.cad.struts2.User" method="adduser">
<!--通过注入的方式封装静态参数-->
<param name="username">张三</param>
<param name="age">18</param>
</action>
</package>

(3)原理

 我们在struts2的运行流程中提到过,我们动作类的动作方法执行之前,会有一系列的拦截器帮我们执行一些操作。 

        在struts-default.xml中,有很多拦截器,拦截器又分为很多拦截器栈,我们默认是使用defaultStack的拦截器栈。  

        这个拦截器栈中有一个叫做staticParams的拦截器帮我们完成静态参数的封装,将配置的静态方法通过action类中的set方法设置进去。

二、动态参数封装

什么是动态参数?

像我们用表单提交的数据,就是动态数据。数据是可变的

例子:
(1)第一步:我们先创建一个添加用户的表单
        <form action="${pageContext.request.contextPath }/action1" method="post">
用户名:<input type="text" name="username"><br>
年 龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
(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文件  

        <package name="p1" extends="struts-default">

            <action name="action1" class="com.cad.struts2.User"  method="adduser">

            </action>
</package>

这一系列操作是由拦截器栈中的名为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  

  

                <body>
<form action="${pageContext.request.contextPath }/action1" method="post">
用户名:<input type="text" name="user.username"><br>
年 龄:<input type="text" name="user.age"><br>
<input type="submit" value="提交">
</form>
</body>

 原理:

这一系列操作还是拦截器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方法对参数赋值

  

 

(八)Struts2中的参数封装的更多相关文章

  1. 通过反射将request中的参数封装到对象中

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...

  2. 将Map中的参数封装为XML

    public String packageYDImageUploadXML(String versionCode, Map parmsMap) throws ParseException { Docu ...

  3. struts2 二: 参数封装

    封装请求正文到对象中(非常重要) 1.静态参数封装 在struts.xml配置文件中,给动作类注入值.调用的是setter方法. struts.xml的编写: <action name=&quo ...

  4. struts2中constant参数设置

    序号 方法 说明 1 <constant name="struts.i18n.encoding" value="UTF-8"/> 指定web应用默认 ...

  5. Struts2中请求参数的接收方式和ModelDriven机制及其运用

    odelDriven 为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar ...

  6. python nose测试框架全面介绍八---接口测试中非法参数的断言

    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...

  7. Struts2中带参数的结果集

    2.首先,新建一个struts2项目,项目名为ResultParam,打开index.jsp页面,修改编码格式为utf-8,添加一个超链接,用于向结果集传参数,完整代码如下: 相应的struts.xm ...

  8. struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式

    1.属性驱动 a\  一般的set public class UserAction extends ActionSupport { private String username; private S ...

  9. Struts2中Action接收参数的方法主要有以下三种:

    Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接 ...

随机推荐

  1. [转]百度Appollo无人车Perception Module 分析

    https://github.com/ApolloAuto/apollo/blob/master/docs/howto/modules/apollo1.5_perception_module_stud ...

  2. 一次 MySQL 线上死锁分析实战

    关键词:MySQL Index Merge 前言 MySQL 的锁机制相信大家在学习 MySQL 的时候都有简单的了解过,那既然有锁就必定绕不开死锁这个问题.其实 MySQL 在大部分场景下是不会存在 ...

  3. Oracle数据库在给表添加字段的sql中用comment报错

    原因:不同于mysql,Oracle数据库在添加表字段时不能直接用comment,而是单独写一个sql语句,如下: alter table SYS_USER add SENDMSG_LASTTIME ...

  4. Bitter.NotifyOpenPaltform : HTTP 异步消息接收调度中心--开源贡献 之 一:简介

    现在互联网的系统越来越趋向于复杂,从单体系统到现在的微服务体系演变.公司与公司的分工也越来越明确. 大数据公司提供了大数据服务 人脸识别公司提供了人脸识别服务 OCR 公司提供了专业的OCR 服务 车 ...

  5. 翻译:《实用的Python编程》03_00_Overview

    目录 | 上一节 (2 处理数据) | 下一节 (4 类和对象) 3. 程序组织 到目前为止,我们已经学习了一些 Python 基础知识并编写了一些简短的脚本.但是,当开始编写更大的程序时,我们会想要 ...

  6. Kubernetes-4.Pods

    docker version:19.03.14 kubernetes version:1.19.4 ** 已了解Kubernetes的组成.安装.以及kubectl基本命令使用 本文概述Kuberne ...

  7. 使用 Java 开发 Gradle 插件

    Gradle 插件代码可以在 build.gradle 中,buildSrc 项目中,以及独立的插件项目中编写.本文将介绍如何在一个独立的项目中使用 Java 语言编写 Gradle 插件,并发布到仓 ...

  8. Windows常用快捷键和基本dos命令

    Windows常用快捷键 键盘功能键:Tab,Shift,Ctrl,Alt,空格,Enter,Window... 键盘快捷键: 全选:Ctrl+A 复制: Ctrl+C 粘贴: Ctrl+V 撤销: ...

  9. 测试平台系列(5) 引入Ant Design Pro

    引入Ant Design Pro 回顾 还是继续回顾下之前的作业, 返回的中文变成了ascii字符,不要紧,我们光荣地百度一哈. 随便点进去看看,都可以找到正确答案: 可以看到,我们需要修改confi ...

  10. 记录 Allsec 解题过程

    开局打开URL:http://119.3.191.245:65532/#/allsecPlayGame,前去做游戏 游戏URL:http://119.3.191.245:8877/Login.php ...