Struts2之ModelDriven和Preparable拦截器
首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack
- <package name="default" namespace="/" extends="struts-default">
- <!-- 配置使用 paramsPrepareParamsStack 作为默认的拦截器栈 -->
- <!-- 修改 PrepareInterceptor 拦截器的 alwaysInvokePrepare 属性值为 false -->
- <interceptors>
- <interceptor-stack name="teststack">
- <interceptor-ref name="paramsPrepareParamsStack">
- <param name="prepare.alwaysInvokePrepare">false</param>
- </interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <default-interceptor-ref name="teststack"/>
- <action name="emp-*"
- class="com.app.EmployeeAction"
- method="{1}">
- <result name="{1}">/emp-{1}.jsp</result>
- <result name="success" type="redirectAction">emp-list</result>
- </action>
- <action name="emp-edit" <!--这段代码按理上面的应该可以用但是如果不加页面跳转错误 不清除是字打错了还是怎么了-->
- class="com.app.EmployeeAction"
- method="edit">
- <result name="edit">/emp-edit.jsp</result>
- </action>
- </package>
拦截顺序
- <interceptor-stack name="paramsPrepareParamsStack">
- <interceptor-ref name="exception"/>
- <interceptor-ref name="alias"/>
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="checkbox"/>
- <interceptor-ref name="datetime"/>
- <interceptor-ref name="multiselect"/>
- <interceptor-ref name="params"/> //1.栈顶对象为当前Action将参数赋值给Action类中对应属性
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="prepare"/> //2.调用prepareXxx方法为ModelDriven准备model
- <interceptor-ref name="chain"/>
- <interceptor-ref name="modelDriven"/> //3.将model中的参数置于栈顶
- <interceptor-ref name="fileUpload"/>
- <interceptor-ref name="staticParams"/>
- <interceptor-ref name="actionMappingParams"/>
- <interceptor-ref name="params"/> //4.输入参数赋值给栈顶元素
- <interceptor-ref name="conversionError"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
Java代码 实现ModelDriven, Preparable接口
- package com.app;
- import java.util.Map;
- import org.apache.struts2.interceptor.RequestAware;
- import com.opensymphony.xwork2.ModelDriven;
- import com.opensymphony.xwork2.Preparable;
- public class EmployeeAction implements RequestAware, ModelDriven<Employee>, Preparable{
- private Dao dao = new Dao();
- private Employee employee;
- public String update(){
- dao.update(employee);
- return "success";
- }
- public void prepareUpdate(){
- employee = new Employee();
- }
- public String edit(){
- // System.out.println(222222);
- return "edit";
- }
- public void prepareEdit(){
- //System.out.println(1111111);
- employee = dao.get(employeeId);
- }
- public String save(){
- dao.save(employee);
- return "success";
- }
- public void prepareSave(){
- employee = new Employee();
- }
- public String delete(){
- dao.delete(employeeId);
- return "success";
- }
- public String list(){
- request.put("emps", dao.getEmployees());
- return "list";
- }
- private Map<String, Object> request;
- @Override
- public void setRequest(Map<String, Object> arg0) {
- this.request = arg0;
- }
- private Integer employeeId;
- public void setEmployeeId(Integer employeeId) {
- this.employeeId = employeeId;
- }
- @Override
- public Employee getModel() {
- return employee; //将employee置于栈顶
- }
- @Override
- public void prepare() throws Exception {
- System.out.println("prepare...");
- }
- }
list.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <s:form action="emp-save">
- <s:textfield name="name" label="Name"></s:textfield>
- <s:textfield name="email" label="Email"></s:textfield>
- <s:submit></s:submit>
- </s:form>
- <br>
- <hr>
- <br>
- <table cellpadding="10" cellspacing="0" border="1">
- <thead>
- <tr>
- <td>ID</td>
- <td>Name</td>
- <td>Email</td>
- <td>Edit</td>
- <td>Delete</td>
- </tr>
- </thead>
- <tbody>
- <s:iterator value="#request.emps">
- <tr>
- <td>${employeeId }</td>
- <td>${name }</td>
- <td>${email }</td>
- <td><a href="emp-edit?employeeId=${employeeId }">Edit</a></td>
- <td><a href="emp-delete?employeeId=${employeeId }">Delete</a></td>
- </tr>
- </s:iterator>
- </tbody>
- </table>
- </body>
- </html>
edit.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <s:debug></s:debug>
- <br>
- <br>
- <s:form action="emp-update">
- <s:hidden name="employeeId"></s:hidden>
- <s:textfield name="name" label="Name"></s:textfield>
- <s:textfield name="email" label="Email"></s:textfield>
- <s:submit></s:submit>
- </s:form>
- </body>
- </html>
Struts2之ModelDriven和Preparable拦截器的更多相关文章
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1
- ModelDriven 和 Preparable 拦截器
Params 拦截器 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueSta ...
- Struts2 - ModelDriven 拦截器、Preparable 拦截器
开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...
- 6. ModelDriven拦截器、Preparable 拦截器
1. 问题 Struts2 的 Action 我们将它定义为一个控制器,但是由于在 Action 中也可以来编写一些业务逻辑,也有人会在 Action 输入业务逻辑层. 但是在企业开发中,我们一般会将 ...
- struts2 javaweb 过滤器、监听器 拦截器 原理
转: 过滤器.监听器 拦截器 过滤器 创建一个 Filter 只需两个步骤: (1)创建 Filter 处理类: (2)在 web.xml 文件中配置 Filter . 创建 Filter 必须实现 ...
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- struts2复习(五)拦截器总结
1. 拦截器(Interceptor): 拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的. 2. 拦截器的配置 1)编写实现Interceptor 接口的类. 2)在s ...
- Struts2学习笔记(十)——自定义拦截器
Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...
- Struts2学习第四天——拦截器及文件上传
1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...
随机推荐
- sqljdbc4.jar的安装
自己项目环境(idea+jdk1.8+tomcat8),在搭建maven项目时,由于本地数据库是使用了sqlserver,所以需要项目与sqlserver之间建立连接,但是网上查的资料都说微软不允许以 ...
- redis创建集群——[ERR] Sorry, can't connect to node 192.168.X.X
创建集群或者连接时会出现错误:只能用127.0.0.1创建 这是需要修改redis.conf 把bind注释掉 protected-mode no 有些旧版本注释requirepass 技术交流群:8 ...
- 手机端适配iPhoneX
iPhoneX取消了物理按键,改成底部小黑条,这一改动导致网页出现比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可(即常 ...
- jQuery的鼠标悬停时放大图片的效果
这是一个基于jQuery的效果,当鼠标在小图片上悬停时,会弹出一个大图,该大图会跟随鼠标的移动而移动.这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后 ...
- vue vue-route 传参 $route.params
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- iOS8 UIAlertView键盘闪一下的问题
if (SYSTEM_VERSION >= 8.0) { UIAlertController *alertCtrl = [UIAlertController alertControllerWit ...
- 深浅copy和字符串细节方法
copy a=[1,2,3]b=aid(a)55499272id(b)55499272 id()就是查看内存地址,是不是同一个对象. c=a.copy()id(c)57940040 可见copy()出 ...
- Sevlet处理HTML表单
表单<form>用于搜集不同类型的用户输入.可以轻松地将一个HTML表单从一个Servlet发送到浏览器,当用户提交表单时,在表单元素中输入的值就会被当做请求参数发送到服务器. reque ...
- windows 与 Linux SOCKET通讯
windows client 端口 // Def_win_client_socket_test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...