首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

《Struts 二 in Action》读书笔记——part 2——核心概念之Action

2013-01-27 
《Struts 2 in Action》读书笔记——part 2——核心概念之Action第三章 使用Struts 2 Action3.1 Struts 2 Action

《Struts 2 in Action》读书笔记——part 2——核心概念之Action

第三章 使用Struts 2 Action
3.1 Struts 2 Action简介
Action 的作用:

Action封装工作单元,或者至少是业务逻辑的入口点(如果业务逻辑很复杂,我们可能会把业务逻辑构建成一个业务组件,再把这个业务组件注入到动作中去)。Action为数据转移提供场所,Action只需把每一个期望承载的数据实现为JavaBean属性。除了这些简单的JavaBean属性,还有两种技术可以把Action作为数据转移对象使用(后续会讲到)。Action为结果路由选择返回控制字符串。

3.2 打包Action
1. Struts 2的包提供了一种继承机制,让你能够继承框架已经定义的组件。

?
2. 可以为多个不同的包设置相同的命名空间。
3. 如果不设置namespace属性,你的动作就会进入默认命名空间。默认命名空间在所有其他的命名空间之下,用来解决不能与任何显示声明的命名空间匹配的请求。默认命名空间实际上是空字符串” ”。

4. 你也可以定义叫做”/”的根命名空间。根命名空间和其他显示声明的命名空间相同,必须被完全匹配。
5. 大部分智能默认值定义在系统内建的一个叫做struts-default的包中。虽然当你创建自定义的包时不是一定要扩展struts-default,但是省略了继承就等于拒绝了框架的核心功能。


3.3 实现Action
ActionSupport类。它是一个提供了Action接口和其他几个有用接口的默认实现的便利类,提供了诸如数据验证、错误消息本地化等功能。数据验证和文本本地化服务是通过拦截器和接口的协作实现的。拦截器控制服务的执行,Action实现接口提供被拦截器调用的方法。

public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {      public Locale getLocale() {        ActionContext ctx = ActionContext.getContext();        if (ctx != null) {            return ctx.getLocale();        } else {            if (LOG.isDebugEnabled()) {        LOG.debug("Action context not initialized");            }            return null;        }    }}

?

你还是用以前的方式取得消息文本。甚至我们还没有使用它的时候,ActionSupport的TextProvider实现已经开始在每次为我们取得文本消息的时候通过调用LocalProvider接口的getLocale()方法检查地域。使用得到的地域,TextProvider(也就是ActionSupport)会尝试为这个地域定位属性文件。


3.4 向Action传递数据
1. 前面的内容,Action把从请求接收到的所有数据放在简单的JavaBean属性上。另外还有两种方式来传递数据。

第一种选择也是基于JavaBean。可以公开一个复杂对象作为JavaBean属性,让数据直接传输到这个对象上。另一种选择是使用被称为ModelDriven的Action。

2. 使用域对象做数据转移存在危险。如果请求中的参数与域对象属性匹配,那么数据会被移动到这些属性上。但是域对象可能会包含一些敏感数据(如ID),我们不想把它们公开给自动数据转移机制。这个问题现在并没有很好地解决方案。


3.5 案例研究:文件上传
fileUpload拦截器创建了我们之前看到过的数据自动转移机制的一种特别版本。在默认拦截器栈defaultStack中可以看到fileUpload拦截器在params拦截器之前。当fileUpload拦截器执行时,它处理一个多重请求(multipart request)并且将文件与其他一些元数据一起转换到请求参数中(params拦截器会自动将数据转移到Action上)。在后加工阶段fileUpload拦截器再次出发时,用来消除上传文件的临时版本。

?

热点排行