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

本文详细介绍了Struts2框架中的ActionContext对象及其常用API方法,包括如何获取request、session和application等上下文信息。此外,还对比讲解了两种不同的模型处理方式:DomainModel和ModelDriven,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,实现与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栈中



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值