`
suliuyes
  • 浏览: 93675 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

struts2 的ModeDriven Preparable

 
阅读更多

paramsPrepareParamsStack在Struts 2.0中是一个很奇妙的interceptor stack,以至于很多人疑问为何不将其设置为默认的interceptor stack。paramsPrepareParamsStack主要解决了ModelDriven和Preparable的配合问题,从字面上理解来说, 这个stack的拦截器调用的顺序为:首先params,然后prepare,接下来modelDriven,最后再params。Struts 2.0的设计上要求modelDriven在params之前调用,而业务中prepare要负责准备model,准备model又需要参数,这就需要在 prepare之前运行params拦截器设置相关参数,这个也就是创建paramsPrepareParamsStack的原因。流程如下: 


     1. params拦截器首先给action中的相关参数赋值,如id 
     2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象 
     3. modelDriven拦截器将model对象压入value stack,这里的model对象就是在prepare中创建的 
     4. params拦截器再将参数赋值给model对象 
     5. action的业务逻辑执行 依据此stack

下面是一个例子,大家看一下吧

public class UserAction extends ActionSupport implements ModelDriven, Preparable{
private User user;
private int id;
private UserService service; // user business service

public void setId(int id) {
   this.id = id;
}
/**
* create a new user if none exists, otherwise load the user with the specified id
*/
public void prepare() throws Exception {
   if( id==0 ) {
      user = new User();
   } else {
      user = service.findUserById(id);
   }
}
public Object getModel() {
return user;
}
/**
* create or update the user and then view the created user
*/
public String update() {
   if( id==0 ) {
     service.create(user);
   } else {
     service.update(user);
}
return "redirect";
}
/**
* delete the user and go to a default home page
*/
public String delete() {
service.deleteById(id);
return "home";
}
/**
* show the page allowing the user to view the existing data 
*/
public String view() {
   return "view";
}
/** 
* show the page allowing the user to view the existing data and change the values 
*/
public String edit() {
   return "input";
}
}
 
在 上述代码中,edit和view都不需要根据id再为界面准备数据,因为prepare方法已经准备好了model,这些方法很简单。对于update方 法,prepare首先会从数据库中加载数据,然后params拦截器会将参数值付给model,在update直接更新就可以,不会出现数据被乱更新的 情况。象Hibernate框架,会判断哪些字段更新了,然后进行更新,性能也不会损失。
通过paramsPrepareParamsStack可以让流程更明确,代码更简洁,也更利于大家的交流。

以上代码参考自《Starting Struts 2 》。

分享到:
评论

相关推荐

    Struts2视频教程

    ### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...

    struts2解析文件

    Struts2是一个强大的Java EE应用程序框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用。它是在Struts1的基础上发展起来的,旨在解决其前身在灵活性和可扩展性上的不足。Struts2提供了更加优雅的API,更加...

    struts2框架源码

    Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目,被广泛应用于Java EE应用程序开发中。Struts2框架是Struts1的升级版本,它结合了WebWork框架的优点,提供了更高效、...

    struts2工作流程

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它主要用来构建Web应用程序。在深入探讨Struts2的工作流程之前,我们先了解一下MVC模式的基本概念。MVC模式将应用逻辑分隔为三个部分:...

    Struts2输入校验总结

    Struts2是一个流行的Java web开发框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在处理用户输入时,确保数据的有效性和正确性是至关重要的,这就是输入校验的作用。Struts2提供了内置的验证框架Struts2 ...

    struts2 笔记(根据尚硅谷视频所记)

    Struts2是一个强大的MVC框架,它为Java Web应用程序提供了模型-视图-控制器的设计模式。在本笔记中,我们将深入探讨Struts2的核心配置文件`struts.xml`及其主要配置元素。 首先,`struts.xml`是Struts2的核心配置...

    使用struts2实现的文件上传功能

    Action类需要继承自`org.apache.struts2.interceptor.FileUploadInterceptor`支持的接口,例如`Preparable`和`ModelDriven`。然后,定义一个或多个属性,它们将作为上传文件的载体。这些属性需要使用`@ultipartFile`...

    struts2小例子

    接口或继承`org.apache.struts2.dispatcher.ng.ExecuteOperations`和`com.opensymphony.xwork2.Preparable`接口。 2. **配置文件**:Struts2使用XML配置文件(如struts.xml)来定义Action类、结果页面、拦截器等。...

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    struts2高级.txt

    根据给定的文件信息,我们将深入探讨Struts2框架中的几个关键知识点,这些知识点涵盖了配置、国际化设置、包管理、模型驱动以及与Servlet API的集成等核心领域。 ### Struts2配置与国际化 #### 配置文件解析 ...

    Struts2内置拦截器简介

    ### Struts2内置拦截器简介 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种基于MVC(Model-View-Controller)设计模式的Web应用开发框架。Struts2的核心是拦截器(Interceptor)机制...

    在struts 2中实现文件上传

    Struts 2是一个非常流行的Java Web框架,它提供了一种优雅的方式来组织和构建MVC(模型-视图-控制器)应用程序。在Struts 2中实现文件上传是常见的需求,通常用于用户提交表单时上传图片、文档等数据。下面我们将...

    struts2 框架配置

    Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它极大地简化了Web应用的开发过程。本配置教程将深入探讨Struts2的基础配置及其在实现登录功能、数据验证和国际化方面的应用,同时也会...

    struts 2.0源码2

    这个"Struts 2.0源码2.rar"压缩包包含了多个关于Struts 2.0深入学习的视频教程,主要涉及以下几个关键知识点: 1. **声明式验证**:在Struts 2中,验证可以通过编写XML配置文件或使用注解实现,这种方式称为声明式...

    struts2文件上传模板

    `FileUploadAction`类需要实现Struts2的`Preparable`接口,以便在请求处理之前初始化对象。同时,我们需要一个成员变量来接收上传的文件,如`private File file;` 和对应的属性访问器。 3. **处理文件上传**: 在...

    struts2实现文件上传

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。在Struts2中实现文件上传是一项常见的需求,这通常涉及到客户端浏览器与服务器之间的数据交互,以及服务器端对上传文件的处理。...

    struts2验证框架

    ### Struts2 验证框架详解 #### 一、引言 在Web开发中,确保用户输入的有效性和正确性是至关重要的。Struts2作为一款流行的Java Web开发框架,提供了强大的验证功能来帮助开发者实现这一目标。本文将详细介绍Struts...

    struts2最全验证框架

    ### Struts2 最全验证框架知识点详解 #### 一、Struts2 验证框架概述 Struts2 是一个基于MVC模式的Java Web开发框架,它提供了丰富的功能来简化Web应用的开发过程。其中,Struts2的验证框架是其重要的组成部分之一...

Global site tag (gtag.js) - Google Analytics