Struts2第十二篇【模型驱动】

什么是模型驱动

在Struts2中模型驱动就是用来封装数据的..完成数据的自动封装.

为什么要使用模型驱动?

我们之前就使用过Sturts2的数据自动封装功能,是用params拦截器完成的…既然有了params拦截器,为啥还要模型驱动??

当我们使用params拦截器完成数据自动封装的时候,如果要封装的是JavaBean对象,那么在web表单中就必须的name写上javaBean.属性名….

这样的话,web层和Action层就耦合了…因为在web层必须要知道封装的JavaBean对象是什么才能够实现自动封装!

而模型驱动就解决了这个问题!即时不知道Action层的JavaBean对象是什么,也能够完成数据自动封装!

模型驱动的实现原理

实现模型驱动功能也是由拦截器完成的,我们来看看拦截器到底做了什么吧….


         <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

拦截方法的源码是这样的:


    public String intercept(ActionInvocation invocation) throws Exception {

        //得到当前要执行的Action对象
        Object action = invocation.getAction();

        //判断该Action对象是否实现了ModelDriven接口
        if(action instanceof ModelDriven) {
            ModelDriven modelDriven = (ModelDriven)action;

            //获取值栈对象
            ValueStack stack = invocation.getStack();

            //得到model的对象
            Object model = modelDriven.getModel();

            //把对象存到值栈对象中
            if(model != null) {
                stack.push(model);
            }
            if(this.refreshModelBeforeResult) {
                invocation.addPreResultListener(new ModelDrivenInterceptor.RefreshModelBeforeResult(modelDriven, model));
            }
        }

        return invocation.invoke();
    }

把model对象放到值栈对象之后,Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中.

也就是说,使用模型驱动是需要配合Params拦截器完成的!

使用数据模型驱动

实现ModelDriven接口

  • 实现ModelDriven接口,重写方法….实现接口时,要封装的对象是什么,形参类型就给什么

public class UserAction extends ActionSupport implements ModelDriven<User> {



    public String login() {

        return SUCCESS;
    }


    @Override
    public User getModel() {
        return null;
    }
}

对象实例化


public class UserAction extends ActionSupport implements ModelDriven<User> {


    //这里一定要实例化
    User user = new User();

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public User getModel() {
        return user;
    }
}

测试

JSP提交页面,直接写上JavaBean对象的属性就行了..不需要写上JavaBean对象的名称!

<form action="${pageContext.request.contextPath}/user_execute">
    <table border="1">

        <tr>
            <td>用户名:<input type="text" name="username"></td>
        </tr>
        <tr>
            <td> 密码:<input type="password" name="password"></td>
        </tr>
        <tr>
            <td>电话:<input type="text" name="cellphone"></td>
        </tr>
        <tr>
            <td> 邮箱:<input type="text" name="email"></td>
        </tr>

        <tr>
            <td><input type="submit" value="提交"></td>
        </tr>

    </table>


</form>
  • 在Action业务方法中输出User对象的数据

    @Override
    public String execute() throws Exception {

        System.out.println(user);
        return SUCCESS;
    }

这里写图片描述


<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
基于深度确定性策略梯度的永磁同步电机强化学习控制方法 本文提出了一种基于深度确定性策略梯度(DDPG)的永磁同步电机(PMSM)电流内环智能控制方法。首先建立了PMSM在d-q坐标系下的数学模型,分析了传统矢量控制双闭环系统中PI控制器的局限性。针对电流内环控制问题,设计了包含电流跟踪误差、转速信息和历史控制量的状态空间,将电压输出作为动作空间,并构建了兼顾跟踪精度和响应速度的奖励函数。通过DDPG算法训练智能体,使其能够自适应调整控制策略。仿真结果表明,与固定参数的PI控制器相比,DDPG控制器在动态响应速度和抗干扰能力方面具有明显优势,为PMSM高性能控制 阅读详情

相关推荐

FPGA高速接口Aurora8B/10B协议实战:从IP核配置到数据流优化

本文详细介绍了FPGA高速接口Aurora8B/10B协议的实战应用,从IP核配置到数据流优化的全流程。通过Aurora8B/10B协议,开发者可以在FPGA间实现高效的数据传输,适用于高速接口设计。文章涵盖了协议基础、IP核配置、AXI4-Stream接口实战技巧以及性能优化策略,帮助读者快速掌握这一关键技术。

weixin_29280657的博客 269

struts2模型驱动深入理解

本文作为个人知识积累,转自【尊重原创,若要深入了解请前往】:http://m.blog.youkuaiyun.com/hon_3y/article/details/71189623  由于之前遇到过model这个对象,一直想深入理解其中机制,查阅很多资料(就是懒得翻源码,以后要自己翻源码了!),没有找到合适的解释或者说没有讲解到模型驱动这个model对象的由来以及实用。最近看到这位优秀的作者的讲

maoyuanming0806的博客 1158

运算放大器多谐振荡器设计实战:从施密特触发器到波形生成

本文详细介绍了运算放大器在多谐振荡器设计中的实战应用,涵盖施密特触发器的迟滞比较原理、非稳态振荡器的自激机制以及单稳态和双稳态电路的设计技巧。通过具体案例和参数计算,帮助工程师掌握波形生成与信号处理的核心技术,提升电路设计效率与稳定性。

pz89012345的博客 217

struts2 接受参数的两种方式(属性驱动和模型驱动)

定义: 在struts2中,页面的数据和action(控制层)传输基本上有两种方式,一个是属性驱动、另一个是模型驱动。 属性驱动 基本数据类型的属性对应: 就是Web页面上html标签的name属性或者与属性相对应的getter/setter相对应。当页面提交的时候,struts2会自动从request对象里面把数据取出来,然后按照名称进行对应,自动设置到Action的属性里面去。 缺点:如果实

xyffly的博客 7128

手推反向传播+numpy实现

反向传播的重要性不必多说,手推也是必备基础,大厂面试要求用numpy实现一下BP也是经常的事。下面以一个简单的两层网络为例(简单到连bias都没有的那种),真·手推反向传播+numpy实现。 说明: input:输入 net_h:隐层 S(x):sigmoid简写 SD(x):sigmoid导数的简写 out_h:隐层经过sigmoid激活的输出 net_o:输出层 out_o:经过经过sigmoid激活的输出层,也就是最后的输出 target(简写t1、t2):Ground...

xian0710830114的专栏 1238

步进电机驱动算法——梯形加减速算法

目录步进电机梯形加减速梯形加减速算法原理分析算法实现 步进电机梯形加减速 电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下: 这种种控制方式的特点是:控制简单、实现容易、价格较低,这种开环控制方式,负载位置对控制电路没有反馈。 对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一固定的规律发出控制脉冲,如果励磁变化太快,电机不能移动到新的位置,那么实际负载位置与理想位置就会产生一个偏差,就有可能出现失步或者过冲现象,所以需要使用加减速算法。 梯形加减速算法,S加减速算法等

aaa376070331的博客 3万+

Struts2属性驱动与模型驱动

1属性驱动是指用Action的属性来封装来回请求的参数. 2.模型驱动     模型驱动是指使用JavaBean来封装来回请求的参数.(个人理解) 建议使用模型驱动,因为相比struts 1的Action类,struts 2的Action类承担了太多的责任:既用于封装来回请求的参数,   也保 护了控制逻辑,这使它的结构不够清晰.这就是模型驱动的优势.  3.到底是用属性驱动和是模

s_shuai88的博客 480

OP-TEE虚拟化支持详解

OP-TEE虚拟化支持解析 OP-TEE提供实验性虚拟化方案,支持多虚拟机共享安全执行环境。核心特性包括: 配置选项:CFG_VIRTUALIZATION启用虚拟化,CFG_VIRT_GUEST_COUNT限制虚拟机数量并分配均等内存资源; Hypervisor协作:需实现虚拟机生命周期通知、SMC参数转换、内存固定等关键协议; 当前限制:仅支持Armv8架构,硬件资源共享有限,采用静态内存配额机制; 架构实现:通过MMU分区切换和扩展内存分配器实现多租户隔离,Nexus核心层管理虚拟机上下文。该方案适用于

Linux内核架构师 110

Struts2的模型驱动和属性驱动

Struts2环境搭建成功后,最起码的要求是能实现对数据的增删改查,然而这就涉及到了如何将前台数据传入到我们后台中,简单说如何将页面的数据传到处理程序中,以及如何把数据库中的数据显示在jsp中,想要实现这些功能,首先要了解Struts2的驱动方式。 属性驱动:使用属性来封装来回请求参数和处理结果,即在jsp页面的每一个form中的name都对应在action中有一个属性与之对应。 如果在jsp

想念的专栏 2672

天龙八部TLBB系列 - 网单服务端各目录文件说明【超详细】

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等) --- 天龙八部服务端各目录详细说明

空名先生 7647

功能安全实战系列07-英飞凌TC3xx电源监控开发详解

本文对电源监控(PBIST及MONBIST)开发介绍,步骤详细配合开发中的测试情况,图文并茂,方便理解。

initiallizer的博客 1111

Struts2模型驱动

把动作和模型隔开 在使用 Struts 作为前端的企业级应用程序时把动作和模型清晰地隔离开是有必要的: 有些动作类不代表任何模型对象, 它们的功能仅限于提供图文显示服务 ModelDriven 拦截器 l情景:有一个用来处理客户的CustomerAction类,该动作类实现了ModelDriven接口. l当用户触发CustomerAction动作时,ModelDriven拦截器将

球球之家 1406

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 789

struts2模型驱动

模型驱动:把数据跟处理分开,用单独的JavaBean封装数据(不管是请求的,还是返回的,可以在一起封装),把处理类完全孤立成一个框架,用这个模型作为灵魂在驱动整个骨架。     属性驱动--你把一大堆属性搞到你的处理类里面,完全可以。方便、快捷而且灵活,不过结构清晰度当然就不好了。 1.struts2实现模型驱动的简单登陆 User(bean)类: public class User {

下辈子注定还当程序猿 738

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Struts2的属性驱动与模型驱动的区别

1.Struts2的属性驱动.Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应。看下面代码片段:            Username:            Password:            Confirm:            

阿布客栈 8137

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Struts2模型驱动核心机制详解

Struts2采用模型驱动来实现对于表单的多个属性进行封装并通过调用action中的set方法来注入到action中对应的POJO.首先,Struts2中包括属性注入和域模型注入,属性注入正如我们所熟悉的servlet中对于每个表单提交过来的参数进行request的getParameter方法,获取每个属性值来注入类中。域模型注入则是上面我们所说的属性封装,下面我们看个例子: 首先定义jsp页面中

jordandandan的专栏 2155

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Struts模型驱动

模型驱动 Struts运行时候,会执行默认的拦截器栈,其中有一个拦截器,模型驱动拦截器: <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>   @Override public String intercept(Action

LFSenior 4041

Struts2-数据回显、模型驱动等常用技术

Struts2-数据回显、模型驱动等常用技术数据回显对于数据回显,必须要用struts标签!例如下面这个标签有两种方式实现回显:<td><s:textfield name="user.username"/></td>1) 将user作为action的实例变量 Action跳转时是这样的-> public class UserAction extends ActionSupport {

motionEnabled 5088

Struts2属性驱动和模型驱动详解

属性驱动,就是在Action中定义的是和表单中对应的一个个属性,每个属性都有对应的get/set方法。当表单提 交到Action后,Struts2将会自动将根据表单的name属性调用Action中相应的属性setter,去自动赋值。     模型驱动,就是事先定义一个模型即Model,将表单传递过来的数据封装成一个Model对象后,再传递给Action。 当表单提交到Action

思想上移,行动下移 1079

Struts2的模型驱动

完整版见https://jadyer.github.io/

半步多 3872
上一篇: Struts2第十一篇【简单UI标签、数据回显】
下一篇: Struts2第十三篇【防止表单重复提交】
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值