技术标签: SSH
我们可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动)Action和Model-Driven(模型驱动)Action。
一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性对应。
二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将Object getModel()方法取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。
getmodel()方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)userName来访问,而不需要使用(对象名.属性名)user.userName这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中进行new操作。
public class DepartmentAction extends ActionSupport implements ModelDriven<Department>{
private DepService depService;
private int currPage = 1;
// 必须NEW一个新的对象
private Department department = new Department();
// getmodel()执行后会将department对象压入ValueStack值栈中
public Department getModel() {
// TODO Auto-generated method stub
return department;
}
public void setDepService(DepService depService) {
this.depService = depService;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
// 分页查询,将对象压入值栈后,页面可直接使用对应属性名字进行输出
public String findByPage(){
PageBean<Department> pageBean = depService.findByPage(currPage);
ActionContext.getContext().getValueStack().push(pageBean);
return "findPage";
}
}
这样一个ModelDriven就实现完毕了 在jsp页面中从ModelDriven中取值
value="%{model.did}" --did为需要取值的字段名
(3)在Action提供一个泛型的私有对象,这里就是定义一个User的user对象,并提供相应的getter与setter。
???好了,上面的三件事做完之后,Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。 ???(疑问,待定)
到底是用 Field-Driven(属性驱动) 还是 Model-Driven(模型驱动) 呢?
(1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。
GPS架构1.1 GPS总体架构GPS总体架构如图所示。相关模块功能描述:LocationManager提供定位服务,GpsLocationProvider用于抽象GNSS提供的服务,Network Provider用于抽象网络定位服务,Libgps用于对接Android接口,解析NMEA,Gps engine通过计算raw data,计算出PV并打包到NMEA,AGPS负责S..._简述gps标准体系的框架结构
内容简介本书致力于帮助 Python 开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道 Python 风格的代码。本书尤其深入探讨了 Python 语言的高级用法,涵盖数据结构、Python 风格的对象、并行与并发,以及元编程等不同的方面。 Python 数据模型:理解为什么特殊方法是对象行为一致的关键。 数据结构:充分利用内置类..._流畅的python
_tf1.14对矩阵增加维度
问题描述 <el-container> <content-header></content-header> <dashboard-content></dashboard-content> <content-footer></con..._element ui 上下布局
Python--异常处理和断言
问题描述//// ViewController.m// iOSzonglan//// Created by doushuyao on 2021/3/12.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; for(int i
最近公司需要消息组件,采用的是IBM的mq,由于网上资料相对来说比较少,遇到了不少问题,每次到网上去搜索也挺费劲,下面列出我遇到部分问题及解决办法。问题一:2033错误 出现该错误的原因可能是队列中数据为空,取不到值引起的。 问题二:2085错误 可能原因是配置的MQ名称大小写或者队列名字不对引起的。 问题三:2058错误..._mq2033错误
那些人就不要看了如果内心明显感觉不安,就不要看了。事无纲则繁3.Eyes and Goaale护目镜。Eyes由巩膜sclera,瞳&孔pupil组成。在HTMl中,都用去掉后成这样,goggle-strap link是→去掉后成这样,goggle-strap link是→4.Mouth。$mouth-width:60px;锁定嘴巴宽度,top left margin-left heigh..._html+css写横向多层关系架构图
视图SYS.USER_TAB_COLS和SYS.USER_TAB_COLUMNS都保存了当前用户的表、视图和Clusters中的列信息。通过检索这两个表,可以方便的获取到表的结构。主要的列属性有: TABLE_NAME 表、视图或Clusters名称 COLUMN_NAME 列名 DATA_TYPE 数据类型 DATA_TYPE_MOD Da_user_tab_column里有事图吗
本文将从多个维度综合对比Kafka、RabbitMQ、RocketMQ、ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。 特点RabbitMQActiveMQKafkaRocketMQ资料文档资料数量多资料数量多资料数量中等资料数量少,建议去官网上看开发语言ErlangJavaScalaJava支持的协议AMQPOpenWire、STOMP、..._mq 对比
Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现在Java的TimerTask中更新主线程UI。现给出一个简单示例。代码使用标准Java的TimerTask和Timer启动一个计时器Task。该任务每隔2秒更新主线程的UI(在主线程的TextV
Qt中有Validator这个类,用来给QLineEdit之类的加入输入验证,原生的验证器有QIntValidator, QDoubleValidator, QRegExpValidator, QRegularExpressionValidator,分别对应着int,double,及正则,其中QRegularExpressionValidator是Qt5之后引入用以替代QRegExpValidat...