转:http://www.cnblogs.com/guanghuiqq/archive/2012/08/24/2654300.html

实现了ModelDriven就必须实现getModel这个方法,该方法返回的是你的ModelDrivern泛型中设定的实体类。其实是为了实现代码的重用,不要再定义一次你在数据访问层定义的属性了,直接用那个类就行了。不过有时候也不是很需要这个东西,比如只有一两个表单域的时候
Struts2的Action在实现com.opensymphony.xwork2.Preparable接口后,就可以重写prepare()方法
此时在Action中,prepare()方法的执行点是在:setXxx()和execute()的执行之前

比如需求:在执行Action的方法前,接收前台隐藏域传过来的值,再根据该值执行相应逻辑
如前台传过来ID,我们根据ID查找数据库对应的用户信息,再跳转到modify()中修改信息
但实际的运行过程中发现,通过Debug断点调试得知prepare()方法接收到的ID值是零
即前台隐藏域中的ID值没有传过来,事实上问题就出在默认的defaultStack拦截器栈上
其实defaultStack无法接收prepare()需要的数据,而应借助paramsPrepareParamsStack拦截器栈
事实上使用prepare拦截器之前,应先调用params拦截器,prepare()才能接收到表单数据
基于这个思路,于是可以通过各种手段将params拦截器放置在prepare拦截器之前即可
比如将defaultStack中的所有拦截器拷贝到struts.xml的我们自定义的myStack拦截器栈中
再按照paramsPrepareParamsStack拦截器栈中的params和prepare顺序修改二者位置即可

(转)实现这两个接口ModelDriven<T>,Preparable有什么用?的更多相关文章

  1. opencv源码阅读之——iOS的两条接口UIImageToMat()和MatToUIImage()

    本文为作者原创,未经允许不得转载:原文由作者发表在博客园: http://www.cnblogs.com/panxiaochun/p/5387743.html 在ios下开发基于opencv的程序时经 ...

  2. 深入Callable及Runnable两个接口 获取线程返回结果

    今天碰到一个需要获取线程返回结果的业务场景,所以了解到了Callable接口. 先来看下下面这个例子: public class ThreadTest { public static void mai ...

  3. vue-element-ui upload组件调用两次接口

    在使用upload中,默认是自动上传,会发现会调用两次接口,一次是Request Method: OPTIONS且不带任何参数(群里大佬说是跨域 预检测),一次是Request Method: POS ...

  4. 老猿学5G随笔:5G网元功能体NF以及NF之间的两种接口--服务化接口和参考点

    一.5G功能体之间的接口类型 5G不同功能体之间提供了两种接口: 服务化接口:Service-basedinterface,这个是类似微服务化架构的服务注册和服务发现来实现的功能体对外暴露的接口,这种 ...

  5. ModelDriven 和 Preparable 拦截器

    Params 拦截器 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueSta ...

  6. Struts2之ModelDriven和Preparable拦截器

    首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack <package name="default" namespace=& ...

  7. InChat版,仅仅两个接口实现自己的IM系统(可兼容)

    InChat 一个IM通讯框架 一个轻量级.高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架.(核心底层Netty) 版本目标:完成基本的消息通讯(仅支持文本消息),离线消息存储,历史消息查 ...

  8. Junit 3.8.1 源码分析之两个接口

    1. Junit源码文件说明 runner framework:整体框架; extensions:可以对程序进行扩展; textui:JUnit运行时的入口程序以及程序结果的呈现方式; awtui:J ...

  9. 两种接口传送数据协议(xml和json)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/tianyazaiheruan/article/details/37659983    规范性接口开发 ...

随机推荐

  1. Java基础之ArrayList类

    一.ArrayList ArrayList继承了AbstractList分别实现了List.RandomAccess(随机访问).Cloneable(可被克隆(复制的意思)). Serializabl ...

  2. Dart编程实例 - Dynamic 关键字

    Dart编程实例 - Dynamic 关键字 void main() { dynamic x = "tom"; print(x); } 本文转自:http://codingdict ...

  3. PHP ftp_get() 函数

    定义和用法 ftp_get() 函数从 FTP 服务器上下载一个文件并保存到本地一个文件中. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_get(ftp_connec ...

  4. luoguP1290 欧几里德的游戏 [博弈论]

    题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...

  5. 最大流EK和Dinic算法

    最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...

  6. renren-fast-vue-动态路由-添加路由-方式一(直接在原有结构上添加)

    在原有文件夹夹下新建自己的组件 在 mock/modules/sys-menu.js 中引入 实现路由的添加

  7. visual_c++外挂教程(详细)

    课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,G ...

  8. ArcGIS version not specified.

    问题 在调用arcgis10 的ISurface用来取指定航线的地形时,这段代码在加载.dem时总是出错. 报: Fail to open raster dataset 解决方法: 在窗体中加载Map ...

  9. hexo的next主题博客中加入分类页面的js,实现多级目录,并且能够点击展开,隐藏下级目录~(不知道算不算深度优化~~~)

    个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 多级标题 在自己的xxxx.md文件中做如下修 ...

  10. 剑指offer第二版面试题9:用两个队列实现栈(JAVA版)

    题目:用两个队列实现栈. 分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a.由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个.我们不 ...