当我们初学struts2时,我们接触最多和用的最多的莫过于ActionSupport接口了,然而我们也知道,struts2还整合了其他很优秀的接口,下面我以一个具体的实例展示这些用法----------大神勿喷
BaseAction:
import java.lang.reflect.ParameterizedType;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
/**
* 抽象的action超类,专门用于继承
*/
public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>,
Preparable {
private static final long serialVersionUID = -1314560516485837572L;
public T model ;
@SuppressWarnings("unchecked")
public BaseAction(){
try {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
Class<T> clazz = (Class<T>) type.getActualTypeArguments()[0];
model = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
public void prepare() throws Exception {
}
public T getModel(){
return model ;
}
}
TestAction:
@Controller
@Scope("prototype")
public class TestAction extends BaseAction<User>implements UserAware,RequestAware,ApplicationAware,ServletContextAware,SessionAware{
private static final long serialVersionUID = -1642353237166273131L;
//注入userService
@Resource
private UserService userService ;
private Integer currentPage;
//接受session的user对象
private User user;
//接受request对象
private Map<String, Object> request;
//接受application对象
private Map<String, Object> application;
//接受ServletContext对象
private ServletContext sc;
//接受session对象
private Map<String, Object> session;
public void validate(){
//===============
}
/**
* 分页显示所有用户
*/
public String allUsers(){
Page page = new Page();
User users = new User();
//设置每页显示条数
page.setEveryPage(3);
if(currentPage == null) {
currentPage = new Integer(1);
}
page.setCurrentPage(currentPage);
Result result = userService.findByPage(page,users);
request.put("users", result.getList());
request.put("page", result.getPage());
return SUCCESS;
}
//=============
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
//注入user对象
public void setUser(User user) {
this.user = user ;
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public void setApplication(Map<String, Object> application) {
this.application = application;
}
public void setServletContext(ServletContext context) {
this.sc = context ;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
在TestAction中,我虽然我只用了request,但是我们却可以发现,这比我们用HttpServletRequest 等代码会简介很多,当然,其他接口也是同样的原理。