上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接口里的字符串常量。