Struts2之ModelDriven的使用

Java代码 
我们可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动)Action和Model-Driven(模型驱动)Action。

一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性对应。 
二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将ObjectgetModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。

在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象。

ModelDriven接口只有一个方法

public  Object  getModel(){
return null;
} 

该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)userName来访问,而不需要使用(对象名.属性名)user.userName这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中进行new操作 
如下 :

 1 //ModelDriven要使用泛型哦
 2
 3 public class LoginAction extends ActionSupport implements ModelDriven<User>{
 4
 5 private static final long serialVersionUID=-6434128483294080524L;
 6
 7 //这里必须要new
 8 private User user=new User();
 9 public String login() throws Exception{
10 //TODOAuto-generatedmethodstub
11 return SUCCESS;
12 }
13
14 //这里是实现接口方法
15
16 @Override
17 public User getModel(){
18 //TODOAuto-generatedmethodstub
19
20 //别忘记了,要把返回值写上哦
21 return user;
22 }
23 }

这样一个ModelDriven就实现完毕了

和属性驱动的Action有很大的区别,下面一一列举:

(1)模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型,这里当然就是具体使用的JavaBean了。

(2)实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象。

(3)在Action提供一个泛型的私有对象,这里就是定义一个User的user对象,并提供相应的getter与setter。

好了,上面的三件事做完之后,Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。

到底是用属性驱动和是模型驱动呢?

(1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。

(2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,那么就使用模型驱动吧,毕竟看起来代码要整洁得多。

(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。

时间: 2024-08-14 14:52:58

Struts2之ModelDriven的使用的相关文章

关于struts2的modelDriven

今天做毕业设计,前台往后台赋值,习惯性的用了modelDriven.但是刚写完就奇怪它的机理是怎样的,它怎么知道我前台传的参是哪个Model的属性(之前用servlet都是手动),于是手贱的ctrl点进去,简单了解了一下 之前记得要使用modelDriven必须使用modelDriven的拦截器,但是我没加这个拦截器也实现了功能,看默认拦截器defaultStack原来所谓的默认拦截器就是一系列拦截器的集合 看modelDriven的源码可以看到 1 @Override 2 3 public S

Struts2实现ModelDriven进行属性驱动

1. 实现ModelDriven的作用 ModelDriven,属性驱动十分有用,form表单提交的的name,和类中的set方法名称想对应,就可以实现自动注入. 2. Struts2实现ModelDriven 3. 属性注入,必须要字段的set方法是public修饰的 原文地址:https://www.cnblogs.com/xyyz/p/8446816.html

Struts2 的ModelDriven理解

以UserAction为例,当UserAction实现了ModelDriven接口之后,与该接口相关的默认配置的拦截器会在拦截请求之后判断该请求是将要被UserAction处理而且UserAction实现了ModelDriven接口,因此就会在执行UserAction的相应方法之前,调用getModel方法,将UserAction中的Model类(比如Use)r的对象(假设为u)压入ValueStack中,作为root对象.这时候如果提交的表单或者url中传值过来,比如username,pass

Struts2使用ModelDriven后JSON数据返回不正确

在struts.xml中加入<param name="root">action</param> <result name="exist" type="json"> <param name="root">action</param> </result>

[JavaWeb基础] 018.Struts2 MVC架构之ModelDriven

用过struts1的人接触struts2的时候,通常会产生一个疑惑,明明struts1已经把action的form分开了,为什么struts2确把模型放在action中定义.其实这个方式只是想让action更加直观,但是如果表单数据过多的话,action类就会出现过于冗长,所以struts2的ModelDriven就要出来解决问题了.下面讲讲ModelDriven的机制 1.工作原理 ModelDriven的机制背后就是ValueStack.界面可以通过直接指定对象的属性名就能给对象进行赋值.

struts2学习笔记之五:表单数据收集的几种方式

方法一:struts2对ModelDriven模式的支持(模型驱动模式) Struts2可以采用类似于Struts1中的ActionForm方式收集数据,这样方式叫ModelDriven模式 Action需要实现ModelDriven接口,实现getModel()方法,返回Bean对象,这样struts2会通过getModel()方法拿到对象,使用set方法把数据填充到对象中 创建User类(Bean对象,包含geter方法和seter方法的纯java类) User类 package com.d

Struts2表单数据接收方式

1.将Action类作为一个POJO,直接进行接收 在Action类内部定义字段名称,并为之声明get/set方法.页面表单name属性与定义字段名称相同. package com.common.login; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class LoginAction extends ActionSupport{ private String n

struts2理解

(1) Struts2(一)---struts2的环境搭建及实例 (2) struts2(二)---ModelDriven模型驱动 (3) Struts2属性驱动与模型驱动 (4)

struts2进阶篇(2)

一.Action与MVC struts2是一个基于MVC的web应用框架,它将应用程序分为三个组件:模型,视图,控制器. 模型:包含了应用程序的业务逻辑和业务数据,由封装数据和处理业务的javaBean组成. 视图:封装了应用程序的输出形式,也就是页面,如jsp,html. 控制器:负责接收用户的http请求,再调用模型中响应的方法来处理业务,然后调用响应的视图作为显示. 三者共同协同处理响应客户端的请求. 在struts2中控制器分为两部分: 1.核心控制器:它就是在web.xml中配置的St