前言——正常情况下如何在Action中获取到这些变量
全部方法(共四种)可以参考:http://blog.csdn.net/itmyhome1990/article/details/7019476
这里采用其中一种作为示例,即利用ServletActionContext上下文来完成:
1 public class LoginAction { 2 private HttpServletRequest request; 3 private HttpSession session; 4 private ServletContext application; 5 public String execute() { 6 7 request = ServletActionContext.getRequest(); 8 session = request.getSession(); 9 application = session.getServletContext(); 10 11 //application = ServletActionContext.getRequest().getSession().getServletContext(); 12 13 request.setAttribute("aaa", "aaa"); 14 session.setAttribute("bbb", "bbb"); 15 application.setAttribute("ccc", "ccc"); 16 17 return "success"; 18 } 19 }
但是呢,在我之前的学习过程中,在每个Action中都要重复这三部,显得过于繁琐。
在这样的情况下,我们可以通过继承一个BaseAction来解决这些问题。
1 public class BaseAction extends ActionSupport{ 2 3 protected HttpServletRequest getRequest(){ 4 return ServletActionContext.getRequest(); 5 } 6 7 protected HttpServletResponse getResponse(){ 8 return ServletActionContext.getResponse(); 9 } 10 protected HttpSession getSession(){ 11 return getRequest().getSession(); 12 } 13 14 //快速执行标签 15 public void addActionErrorsFromResult(ExecuteResult<?> result) { 16 for (String error : result.getErrorMessages()) { 17 this.addActionError(error); 18 } 19 } 20 public void addFieldErrorsFromResult(ExecuteResult<?> result) { 21 for (String field : result.getFieldErrors().keySet()) { 22 this.addFieldError(field, result.getFieldErrors().get(field)); 23 } 24 } 25 }
这样,我们在写新的Action的时候,就只用extends BaseAction。
即可实现在Action中像在Servlet中一样直接获取Session、Request、Respose了,当然Application也可以实现,这里就不一一呈现了。
时间: 2024-10-13 02:13:25