Dorado 5 : 12.5._action_ (RF1)

我们可以在控制器(Controller)的实现类中为的每一个Action 定义相应的Method,以实现该Action 的具体操作。Method 的名称必须是"do + Action 的名称",其中系统会自动将Action 名称的第一个字母转换成大写。例如:当我们要为一个名为add 的Action 定义操作时,我们应当在Controller 中添加一个名为doAdd 的方法。控制器(Controller)默认方法对应的Method 名是"doAction",这意味着我们无法为Controller 定义一个名为"action"的Action。开发人员在实现一个Action 的Method 时,须定义一个要返回给系统的ActionForward 对象。
Action 正常结束后,系统将自动根据Method 返回的Forward 对象的定义对Request 进行跳转。如果系统在调用Action 的过程中发生异常,系统将自动搜索匹配的Exception 配置来处理请求。开发人员可以为每一个Exception 定义它要捕获的系统异常。如果不为某一个Exception 它要捕获的异常类型,该Exception 将处理所有的异常(相当于java.lang.Throwable)。
当系统根据名称为一个Action 查找匹配的Forward 对象时,系统将首先在当前Action 中查找。如果未能找到匹配的对象,系统将继续到Action 所属的控制层单元(Unit)中去查找,继而到全局的控制层单元(GlobalUnit)中查找。
<ation>元素属性说明如下:

属性

说明

description

Action 说明

name

Action 逻辑名称

XML 范例代码:

<action name="login">
<forward name="success" path="/success.html" />
<forward name="failure" path="/login.jsp" />
</action>

异常处理

当Action 发生异常,系统根据异常类型在当前Action 中查找匹配的<exception>对象,并用匹配的<exception>对象加以处理,如果未能找到匹配的<exception>对象,系统将继续到Action 所属的控制层单元(Unit)中去查找全局的<exception>配置,如果还未找到可以处理的<exception>元素,就到全局的控制层单元(GlobalUnit)中查找。
gobal.map.xml中定义的全局<exception>:

<exception path="/dorado/exception.d" />

该处配置中没有指定任何Exception对象,global.map.xml文件将会利用该配置处理所有SbUnit中未处理的任何异常。
图示说明:
新增Action,并设置Action 的属性

图表 87

图表 88
在Action中添加Forward与Exception

图表 89
配置好的forward 可以在controller 实现类中的"do+Action 名称"中使用如下代码使请求重定向:

public ActionForward doAction(Action action, HttpServletRequest request, HttpServletResponse response)
throws Exception {
//do something......
return action.findForward("welcome");
}