Struts2学习总结(五):ActionContext,DomainModel,ModelDriven

来源:互联网 发布:博爱社区新域名 编辑:程序博客网 时间:2024/04/29 22:44

一,实现与Servlet API交互

ActionContext对象,是Action执行的上下文,其常用的API方法如下:

public static ActionContext getContext()  //实例化ActionContext

  在Struts2的API中,ActionContext的构造方法需要传递一个Map类的上下文对象,应用这个方法非常不方便,所以使用getContext()方法进行创建。getContext是一个静态方法,可以直接调用,返回值就是ActionContext

 public Object get(Object key)  //获取Map类型的request 

   入口参数是Objcet类型的值,获取request可以将此值设置成request(Map request=ActionContext.getContext.get("request");)

public Map getSession()  //获取Map类型的session

   返回的是Map对象,这个Map对象的范围将作用于HttpSession范围

public Map getApplication()--获取Map类型的Application

  返回的是Map对象,这个Map对象的范围将作用于ServletContext范围中

二,DomainModel

域模型DomainModel: 将一些属性信息封装成一个实体对象。

代码:

  public class UserAction extend ActionSupport{         private User user;          public String execute() throws Exception              { return SUCCESS; }          public void setUser(User user)            { this.User=user; }}

在提交请求时:     

<s:form action="userAction"  method="post">          <s:textfiled name="user.name" label="用户名”><./s:textfiled>   </s:form>

三,驱动模型ModelDriven:

     在DomainModel模式中,Action对象可以通过直接定义实例对象的引用来调用实体对象进行相关操作,但要求请求参数必须指定参数对应的实体对象。例如上面代码的user.name。为了操作简单,Struts2提供另一种方式:ModelDriven是Struts2框架的API提供的一个接口(应用了泛型),Action对象可以通过实现此接口获取指定的实体对象。获取的方式是实现ModelDriven接口提供的getModel()方法进行获取。

public  Object  getModel(){ return null; }

处理流程:

      1.实例化Action对象(实体对象)

      2.判断Action对象是否实现了ModelDriven接口

      3.实现了,调用getModel()方法来获取实体对象模型,在获取实体对象后将其返回。


                                  应用ModelDriven的顺序图

代码:

public class LoginAction extends ActionSupport implements ModelDriven<User>{     private static final long serialVersionUID=-6434128483294080524L;     //这里必须要new   private User user=new User();   public String login() throws Exception{  //TODOAuto-generatedmethodstub  return SUCCESS;  }   //这里是实现接口方法   @Override public User getModel(){  //TODOAuto-generatedmethodstub   //别忘记了,要把返回值写上哦    return user;  }  }

在提交请求时:     

<s:form action="userAction"  method="post">          <s:textfiled name="name" label="用户名”><./s:textfiled>   </s:form>

注意:在UserAction类中的user属性必须进行初始化操作,否则,在getModel()方法中获取的实体对象时,会出现空指针异常。

在ModelDriven使用getModel()方法后,将这个对象压入到ValueStack栈中