首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack

  1. <package name="default" namespace="/" extends="struts-default">
  2.  
  3. <!-- 配置使用 paramsPrepareParamsStack 作为默认的拦截器栈 -->
  4. <!-- 修改 PrepareInterceptor 拦截器的 alwaysInvokePrepare 属性值为 false -->
  5. <interceptors>
  6. <interceptor-stack name="teststack">
  7. <interceptor-ref name="paramsPrepareParamsStack">
  8. <param name="prepare.alwaysInvokePrepare">false</param>
  9. </interceptor-ref>
  10. </interceptor-stack>
  11. </interceptors>
  12.  
  13. <default-interceptor-ref name="teststack"/>
  14.  
  15. <action name="emp-*"
  16. class="com.app.EmployeeAction"
  17. method="{1}">
  18. <result name="{1}">/emp-{1}.jsp</result>
  19. <result name="success" type="redirectAction">emp-list</result>
  20. </action>
  21. <action name="emp-edit" <!--这段代码按理上面的应该可以用但是如果不加页面跳转错误 不清除是字打错了还是怎么了-->
  22. class="com.app.EmployeeAction"
  23. method="edit">
  24. <result name="edit">/emp-edit.jsp</result>
  25. </action>
  26.  
  27. </package>

拦截顺序

  1. <interceptor-stack name="paramsPrepareParamsStack">
  2. <interceptor-ref name="exception"/>
  3. <interceptor-ref name="alias"/>
  4. <interceptor-ref name="i18n"/>
  5. <interceptor-ref name="checkbox"/>
  6. <interceptor-ref name="datetime"/>
  7. <interceptor-ref name="multiselect"/>
  8. <interceptor-ref name="params"/> //1.栈顶对象为当前Action将参数赋值给Action类中对应属性
  9. <interceptor-ref name="servletConfig"/>
  10. <interceptor-ref name="prepare"/> //2.调用prepareXxx方法为ModelDriven准备model
  11. <interceptor-ref name="chain"/>
  12. <interceptor-ref name="modelDriven"/> //3.将model中的参数置于栈顶
  13. <interceptor-ref name="fileUpload"/>
  14. <interceptor-ref name="staticParams"/>
  15. <interceptor-ref name="actionMappingParams"/>
  16. <interceptor-ref name="params"/> //4.输入参数赋值给栈顶元素
  17. <interceptor-ref name="conversionError"/>
  18. <interceptor-ref name="validation">
  19. <param name="excludeMethods">input,back,cancel,browse</param>
  20. </interceptor-ref>
  21. <interceptor-ref name="workflow">
  22. <param name="excludeMethods">input,back,cancel,browse</param>
  23. </interceptor-ref>
  24. </interceptor-stack>

Java代码 实现ModelDriven, Preparable接口

  1. package com.app;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.apache.struts2.interceptor.RequestAware;
  6.  
  7. import com.opensymphony.xwork2.ModelDriven;
  8. import com.opensymphony.xwork2.Preparable;
  9.  
  10. public class EmployeeAction implements RequestAware, ModelDriven<Employee>, Preparable{
  11.  
  12. private Dao dao = new Dao();
  13.  
  14. private Employee employee;
  15.  
  16. public String update(){
  17. dao.update(employee);
  18. return "success";
  19. }
  20.  
  21. public void prepareUpdate(){
  22. employee = new Employee();
  23. }
  24.  
  25. public String edit(){
  26. // System.out.println(222222);
  27. return "edit";
  28. }
  29.  
  30. public void prepareEdit(){
  31. //System.out.println(1111111);
  32. employee = dao.get(employeeId);
  33. }
  34.  
  35. public String save(){
  36. dao.save(employee);
  37. return "success";
  38. }
  39.  
  40. public void prepareSave(){
  41. employee = new Employee();
  42. }
  43.  
  44. public String delete(){
  45. dao.delete(employeeId);
  46. return "success";
  47. }
  48.  
  49. public String list(){
  50. request.put("emps", dao.getEmployees());
  51. return "list";
  52. }
  53.  
  54. private Map<String, Object> request;
  55.  
  56. @Override
  57. public void setRequest(Map<String, Object> arg0) {
  58. this.request = arg0;
  59. }
  60.  
  61. private Integer employeeId;
  62.  
  63. public void setEmployeeId(Integer employeeId) {
  64. this.employeeId = employeeId;
  65. }
  66.  
  67. @Override
  68. public Employee getModel() {
  69. return employee; //将employee置于栈顶
  70. }
  71.  
  72. @Override
  73. public void prepare() throws Exception {
  74. System.out.println("prepare...");
  75. }
  76.  
  77. }

list.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4.  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12.  
  13. <s:form action="emp-save">
  14.  
  15. <s:textfield name="name" label="Name"></s:textfield>
  16. <s:textfield name="email" label="Email"></s:textfield>
  17.  
  18. <s:submit></s:submit>
  19. </s:form>
  20.  
  21. <br>
  22. <hr>
  23. <br>
  24.  
  25. <table cellpadding="10" cellspacing="0" border="1">
  26. <thead>
  27. <tr>
  28. <td>ID</td>
  29. <td>Name</td>
  30. <td>Email</td>
  31. <td>Edit</td>
  32. <td>Delete</td>
  33. </tr>
  34. </thead>
  35.  
  36. <tbody>
  37. <s:iterator value="#request.emps">
  38. <tr>
  39. <td>${employeeId }</td>
  40. <td>${name }</td>
  41. <td>${email }</td>
  42. <td><a href="emp-edit?employeeId=${employeeId }">Edit</a></td>
  43. <td><a href="emp-delete?employeeId=${employeeId }">Delete</a></td>
  44. </tr>
  45. </s:iterator>
  46. </tbody>
  47.  
  48. </table>
  49.  
  50. </body>
  51. </html>

edit.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4.  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12.  
  13. <s:debug></s:debug>
  14.  
  15. <br>
  16. <br>
  17.  
  18. <s:form action="emp-update">
  19.  
  20. <s:hidden name="employeeId"></s:hidden>
  21.  
  22. <s:textfield name="name" label="Name"></s:textfield>
  23. <s:textfield name="email" label="Email"></s:textfield>
  24.  
  25. <s:submit></s:submit>
  26. </s:form>
  27.  
  28. </body>
  29. </html>

Struts2之ModelDriven和Preparable拦截器的更多相关文章

  1. struts2 ModelDriven 和 Preparable 拦截器

    Struts2 运行流程图-1

  2. ModelDriven 和 Preparable 拦截器

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

  3. Struts2 - ModelDriven 拦截器、Preparable 拦截器

    开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...

  4. 6. ModelDriven拦截器、Preparable 拦截器

    1. 问题 Struts2 的 Action 我们将它定义为一个控制器,但是由于在 Action 中也可以来编写一些业务逻辑,也有人会在 Action 输入业务逻辑层. 但是在企业开发中,我们一般会将 ...

  5. struts2 javaweb 过滤器、监听器 拦截器 原理

    转: 过滤器.监听器 拦截器 过滤器 创建一个 Filter 只需两个步骤: (1)创建 Filter 处理类: (2)在 web.xml 文件中配置 Filter . 创建 Filter 必须实现 ...

  6. [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. struts2复习(五)拦截器总结

    1. 拦截器(Interceptor): 拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的. 2. 拦截器的配置 1)编写实现Interceptor 接口的类.  2)在s ...

  8. Struts2学习笔记(十)——自定义拦截器

    Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...

  9. Struts2学习第四天——拦截器及文件上传

    1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...

随机推荐

  1. sqljdbc4.jar的安装

    自己项目环境(idea+jdk1.8+tomcat8),在搭建maven项目时,由于本地数据库是使用了sqlserver,所以需要项目与sqlserver之间建立连接,但是网上查的资料都说微软不允许以 ...

  2. redis创建集群——[ERR] Sorry, can't connect to node 192.168.X.X

    创建集群或者连接时会出现错误:只能用127.0.0.1创建 这是需要修改redis.conf 把bind注释掉 protected-mode no 有些旧版本注释requirepass 技术交流群:8 ...

  3. 手机端适配iPhoneX

    iPhoneX取消了物理按键,改成底部小黑条,这一改动导致网页出现比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可(即常 ...

  4. jQuery的鼠标悬停时放大图片的效果

    这是一个基于jQuery的效果,当鼠标在小图片上悬停时,会弹出一个大图,该大图会跟随鼠标的移动而移动.这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后 ...

  5. vue vue-route 传参 $route.params

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. Java并发-volatile的原理及用法

    Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...

  7. iOS8 UIAlertView键盘闪一下的问题

    if (SYSTEM_VERSION >= 8.0) { UIAlertController *alertCtrl = [UIAlertController alertControllerWit ...

  8. 深浅copy和字符串细节方法

    copy a=[1,2,3]b=aid(a)55499272id(b)55499272 id()就是查看内存地址,是不是同一个对象. c=a.copy()id(c)57940040 可见copy()出 ...

  9. Sevlet处理HTML表单

    表单<form>用于搜集不同类型的用户输入.可以轻松地将一个HTML表单从一个Servlet发送到浏览器,当用户提交表单时,在表单元素中输入的值就会被当做请求参数发送到服务器. reque ...

  10. windows 与 Linux SOCKET通讯

    windows client 端口 // Def_win_client_socket_test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...