要使用Action,是使用配置+实现类的模式。
第一步:建立一个类名字尾部为Action,例如LoginAction。可选择让其实现Action接口或继承ActionSupport。
第二步:在这个类中实现控制方法,该方法约定返回一个字符串结果。
第三步:配置struct.xml文件
public interface Action
{
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public static final String NONE= "none";
public static final String SUCCESS = "success";
public String execute() throws Exception;
}
尽管实际使用中Action类只需要将名字定义为*Action的样子,但是Structs2定义了Action接口为了使用户使用更规范。
public class ActionSupport
extends Object
implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable
ActionSupport类实现了包括Action的众多接口的默认方法,默认方法例如获取国际化信息的方法,数据校验的方法,默认的处理用户请求的方法,如果让开发者继承ActionSupport类,能大大简化Action开发。
如:
package com.action;
public class UserAction extends ActionSupport
{
private int userId;
private String userName;
private String userPw;
private String userRealname;
private String userAddress;
private String userSex;
private String userTel;
private String userEmail;
private String userQq;
private String userType;
private String message;
private String path;
private TUserDAO userDAO;
private TStuDAO stuDAO;
public String userAdd()
{
return "succeed";
}
public String userEdit()
{
return "successAdd";
}
public String userLogin()
{
return "succeed";
}
/*省略ser() get()方法
}
然后就是配置相应的Action信息:
Structs2 使用包来组织Action,因此,将Action定义在包定义下完成定义Action通过<package../>下的<Action../>子元素来完成。
<package../>有如下几个属性:
name:这是一个必需属性,该属性指定该包的名字,该名字是其被其它包引用的key
extends:该属性是一个可选属性,该属性指定该包继承其它包。继承其他包意味着可以继承其他包中的Action定义,拦截器定义。
namespace:可选属性,定义该包的命名空间
abstract:可选属性,指定该包是否是个抽象包。抽象包中不能包含Action定义
struts-default包是struts内置的,它定义了很多拦截器,而Struts2很多核心的功能都是通过这些内置的拦截器实现,如:从文件上传、数据验证、自动封装前台传过来的参数等等。我们写的包继承了struts-default包才能使用struts2为我们提供的这些功能,所以通常我们写的每个包都应该继承它。
<action../>的常用属性:
name:必需属性,该属性指定此Action的名字,习惯上此名字为Action的方法名。调用时此名字为被引用的key.
class:必需属性,指定这个Action类的URL。
method:可选属性,执行Action类中指定的方法调用,假如不指定则默认使用Action的execute()方法。
<struts> <package name="lunwen186" extends="struts-default"> <action name="userAdd" class="com.action.UserAction" method="userAdd"> </action> <action name="userEdit" class="com.action.UserAction" method="userEdit"> </action> <action name="userLogin" class="com.action.UserAction" method="userLogin"> </action> </package> </struts>