Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5.1 实现Action接口

表面上看起来,实现Struts 2的Action接口没有太大的好处,仅会污染该Action的实现类。事实上,实现Action接口可以帮助开发者更好地实现Action类。下面首先看Action接口的定义。

public interface Action
{
    // 下面定义了5个字符串常量
    public static final String SUCCESS = "success";
    public static final String NONE = "none";
    public static final String ERROR = "error";
    public static final String INPUT = "input";
    public static final String LOGIN = "login";
    // 定义处理用户请求的execute抽象方法
    String execute() throws Exception;
}

在上面的 Action 代码中,我们发现该 Action 接口里已经定义了 5 个标准字符串常量:SUCCESS、NONE、ERROR、INPUT和LOGIN,它们可以简化execute方法的返回值,并可以使execute方法的返回值标准化。例如处理成功,则返回SUCCESS常量,避免直接返回一个success字符串(程序中应该尽量避免直接返回数字常量、字符串常量等)。

因此,借助于上面的Action接口,我们可以将原来的Action类代码修改为如下所示的代码。

程序清单:codes\02\struts2qs2\WEB-INF\src\org\crazyit\struts2qs\LoginAction.java

// 实现Action接口来实现Struts 2的Action类
public class LoginAction implements Action
{
    //下面是用于封装用户请求参数的两个属性
    private String username;
    private String password;
    // 省略username属性的getter和setter方法
    ...
    // 省略password属性的getter和setter方法
    ...
    //处理用户请求的execute方法
    public String execute() throws Exception
    {
          //当用户请求参数的username等于crazyit,密码请求参数为leegang时
          //返回success字符串,否则返回error字符串
          if (getUsername().equals("crazyit")
                && getPassword().equals("leegang"))
          {
                return SUCCESS;
          }
          else
          {
                return ERROR;
          }
    }
}

对比前面Action和此处的Action实现类,我们发现两个Action类的代码基本相似,除了后面的Action类实现了Action接口。因为实现了Action接口,故Action类的execute方法可以返回Action接口里的字符串常量。