`
wangmored
  • 浏览: 164822 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2 Preparable接口

阅读更多
1. 引言
开发人员在使用struts2开发中,把CRUD方法放在一个action类中,就必定会涉及到一些数据准备的事情;用Preparable接口就再合适不过了。

2. 概述
开发人员在使用struts2涉及到一些数据准备的事情;用Preparable接口,实现这个接口的prepare()方法,这个方法会在action类的所有方法执行前执行,另外开发人员也可以按照它的规则来写一些其它形式的prepare方法,例如aciton中有一个方法叫saveTest(),那么我们可以实现一个prepareSaveTest方法,这样在saveTest ()执行前,会执行prepareSaveTest ()方法。

3. 例子
PrepareTest.java

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.neusoft.mid.bip.adaper.service.ServiceInvoker;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class PrepareTest extends ActionSupport implements Preparable {

private static final long serialVersionUID = 1L;

/**
* 日志输出类
*/
private final static Log log = LogFactory.getLog(ServiceInvoker.class);

/**
* 公共的list
*/
private List<String> list = new ArrayList<String>();

/**
* 添加的list
*/
private List<String> listAdd = new ArrayList<String>();

/**
* 列表的list
*/
private List<String> listShow = new ArrayList<String>();

public String saveTest() {
return SUCCESS;
}

public String listTest() {
return SUCCESS;
}

@Override
public void prepare() throws Exception {
log.info("prepare init......");
list.add("1");
list.add("2");
list.add("3");
}

public void prepareSaveTest() {
log.info("prepareSaveTest load......");
listAdd.add("a");
listAdd.add("b");
listAdd.add("c");
}

public void prepareListTest() {
log.info("prepareListTest load.......");
listShow.add("*");
listShow.add("-");
listShow.add("+");

}

public List<String> getList() {
return list;
}

public void setList(List<String> list) {
this.list = list;
}

public List<String> getListAdd() {
return listAdd;
}

public void setListAdd(List<String> listAdd) {
this.listAdd = listAdd;
}

public List<String> getListShow() {
return listShow;
}

public void setListShow(List<String> listShow) {
this.listShow = listShow;
}

}

Save 页面
<%@ page language="java" pageEncoding="utf-8"%>
<%@ include file="/WEB-INF/bip/pages/commons/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%@ include file="/WEB-INF/bip/pages/commons/jslibs.jsp"%>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/smap/smap.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/smap/util.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/jsTree1.0/jquery.jstree.js"></script>


</head>
<body>
<div align ="center" style="margin-top:200px;">
<font size="5">save ...</font><br/>
prepare list 遍历:
<s:iterator value="list" status="sp" id="com">
<s:property value="com"/>...
</s:iterator>
<br/>
prepare listShow 遍历:
<s:iterator value="listShow" status="sp" id="show">
<s:property value="show"/>...
</s:iterator>
<br/>
prepare listAdd 遍历:
<s:iterator value="listAdd" status="sp" id="add">
<s:property value="add"/>...
</s:iterator>
</div>


<div align="right" style="margin-top:75px;margin-right:70px;">
<a href="list.shtml"/>list</a>
</div>
</body>
</html>

List 页面
<%@ page language="java" pageEncoding="utf-8"%>
<%@ include file="/WEB-INF/bip/pages/commons/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%@ include file="/WEB-INF/bip/pages/commons/jslibs.jsp"%>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/smap/smap.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/smap/util.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/bip/scripts/jsTree1.0/jquery.jstree.js"></script>


</head>
<body>
<div align ="center" style="margin-top:200px;">
<font size="5">list ...</font><br/>
prepare list 遍历:
<s:iterator value="list" status="sp" id="com">
<s:property value="com"/>...
</s:iterator>
<br/>
prepare listShow 遍历:
<s:iterator value="listShow" status="sp" id="show">
<s:property value="show"/>...
</s:iterator>
<br/>
prepare listAdd 遍历:
<s:iterator value="listAdd" status="sp" id="add">
<s:property value="add"/>...
</s:iterator>
</div>


<div align="right" style="margin-top:75px;margin-right:70px;">
<a href="save.shtml"/>save</a>
</div>
</body>
</html>
Spring 文件配置
<bean id="aaa" class="com.neusoft.mid.bip.aaa.test.PrepareTest" scope="prototype"></bean>
Struts 文件配置
<package name="aaa" namespace="/aaa" extends="mat-default">
<action name="save" class="aaa" method="saveTest">
<result name="success">
/WEB-INF/bip/pages/aaa/save.jsp
</result>
</action>

<action name="list" class="aaa" method="listTest">
<result name="success">
/WEB-INF/bip/pages/aaa/list.jsp
</result>
</action>
</package>
分享到:
评论
1 楼 a13597418943 2014-12-18  
    

相关推荐

    Struts2视频教程

    - **Preparable接口**:通过实现`Preparable`接口,可以在Action执行前进行预处理,例如加载数据库中的数据。 - **类型转换和验证**:Struts2支持自定义类型转换器,可以将用户输入的数据转换为所需的类型;同时还...

    struts2解析文件

    - 如果Action实现了Preparable接口,它的prepare()方法会被调用。 - 拦截器链开始执行,每个拦截器按照顺序执行其doIntercept()方法。 - 最后,Action的execute()方法被调用,执行业务逻辑。 - 执行完成后,根据...

    struts2框架源码

    4. **Interceptor的实现**:如Preparable接口用于在Action执行前做预处理,Validation拦截器用于数据验证,Exception拦截器用于异常处理等。 5. **动态方法调用**:Struts2支持动态方法调用,这意味着Action方法...

    struts2工作流程

    同时,`Preparable`接口的`prepare()`方法可以在此阶段被调用,进行预处理。 5. **拦截器(Interceptor)**: 在Action执行之前,一系列的拦截器会按顺序执行。拦截器是Struts2的核心特性,可以实现AOP(面向切面...

    Struts2输入校验总结

    但由于ValueStack中的值可能会丢失,你可以选择实现`Preparable`接口并在`prepare()`方法中重新初始化页面所需的数据。为了使`prepare()`方法能获取到表单提交的参数,需要在Action配置中添加`...

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

    通过`&lt;param&gt;`标签,我们可以自定义拦截器的行为,比如`prepare.alwaysInvokePrepare`被设置为`false`,意味着只有当Action类中有`@Preparable`注解或者实现了`PrepareInterceptor`接口时,`PrepareInterceptor`才会...

    struts2高级.txt

    ### ModelDriven接口与Preparable接口 #### ModelDriven接口 在Struts2中,`ModelDriven`接口用于实现MVC模式中的Model层。当一个Action类实现了`ModelDriven`接口后,它必须提供一个`getModel()`方法,该方法返回...

    struts2小例子

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

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

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

    struts 2.0源码2

    7. **Preparable拦截器**:视频10详细阐述了Preparable接口和相关的拦截器,这些可以帮助在Action执行前进行预处理,比如初始化对象。 通过学习这些视频教程,开发者可以深入理解Struts 2.0的工作原理,提高开发...

    深入浅出Struts2(附源码)

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

    Struts2内置拦截器简介

    - **用途**:如果Action实现了`Preparable`接口,那么在Action执行之前,会先执行`prepare()`方法。这是一个非常有用的特性,可以在Action执行前做一些准备工作。 18. **Static Params (静态参数)** - **功能**...

    struts2 框架配置

    在Struts2中,数据验证可以通过实现ValidatorAware接口或使用Validation拦截器来完成。我们可以在Action类中定义验证规则,或者创建单独的校验文件。 接下来,我们讨论国际化。Struts2支持多语言环境,通过资源包...

    在struts 2中实现文件上传

    这个类需要继承自`ActionSupport`并实现`Preparable`接口,以便在执行业务逻辑之前对上传的文件进行预处理: ```java import org.apache.struts2.interceptor.FileUploadInterceptor; import ...

    struts2最全验证框架

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

    struts2验证框架

    3. **值栈维护**:如果验证失败并需要返回到输入页面时,为了避免值栈中的数据丢失,可以实现`Preparable`接口并在`prepare()`方法中初始化需要的值。同时,需要在Action配置中添加`...

    struts2_工作流程

    - **PrepareInterceptor**:如果Action实现了Preparable接口,调用prepare方法。 - **StaticParametersInterceptor**:从配置文件中设置Action参数。 - **ScopeInterceptor**:管理Action的状态存储在session或...

    struts2拦截器详述ppt

    - **Prepare Interceptor**:如果Action实现了`Preparable`接口,则调用Action类的`prepare`方法。 - **Scope Interceptor**:将Action状态存入session或application域的简便方法。 - **Servlet Config Interceptor*...

Global site tag (gtag.js) - Google Analytics