Struts2的学习(2)--Action类成员变量怎么获取表单属性值

来源:互联网 发布:2017年网络热点 编辑:程序博客网 时间:2024/04/30 16:01
我们现在讨论这样一个问题:Action类里面的成员变量是怎么通过表单传进来的?

1.有这样一个Action类:EmployeeAction.java
  1. package com.yu.struts2.app;

  2. import java.util.Map;

  3. import org.apache.struts2.interceptor.RequestAware;

  4. public class EmployeeAction implements RequestAware {

  5.     private Integer employeeId;

  6.     private Dao dao = new Dao();

  7.     public String list(){
  8.         requestMap.put("emps", dao.getEmployees());
  9.         return "list";
  10.     }

  11.     public String delete(){
  12.         dao.delete(employeeId);
  13.         return "delete";
  14.     }

  15.     private Map<String, Object> requestMap;

  16.     @Override
  17.     public void setRequest(Map<String, Object> arg0) {
  18.         // TODO Auto-generated method stub
  19.         this.requestMap = arg0;
  20.     }

  21.     public Integer getEmployeeId() {
  22.         return employeeId;
  23.     }

  24.     public void setEmployeeId(Integer employeeId) {
  25.         this.employeeId = employeeId;
  26.     }

  27. }

2.struts2运行流程图-1:



    ActionProxy是Action的一个代理类。也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法。
    ActionInvocation就是Action的调用者。ActionInvocation在Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。

3.由下面struts-default.xml文件中的参数如下:
  1. <interceptor-stack name="defaultStack">
  2.                 <interceptor-ref name="exception"/>
  3.                 <interceptor-ref name="alias"/>
  4.                 <interceptor-ref name="servletConfig"/>
  5.                 <interceptor-ref name="i18n"/>
  6.                 <interceptor-ref name="prepare"/>
  7.                 <interceptor-ref name="chain"/>
  8.                 <interceptor-ref name="scopedModelDriven"/>
  9.                 <interceptor-ref name="modelDriven"/>
  10.                 <interceptor-ref name="fileUpload"/>
  11.                 <interceptor-ref name="checkbox"/>
  12.                 <interceptor-ref name="datetime"/>
  13.                 <interceptor-ref name="multiselect"/>
  14.                 <interceptor-ref name="staticParams"/>
  15.                 <interceptor-ref name="actionMappingParams"/>
  16.                 <interceptor-ref name="params"/>
  17.                 <interceptor-ref name="conversionError"/>
  18.                 <interceptor-ref name="validation">
  19.                     <param name="excludeMethods">input,back,cancel,browse</param>
  20.                 </interceptor-ref>
  21.                 <interceptor-ref name="workflow">
  22.                     <param name="excludeMethods">input,back,cancel,browse</param>
  23.                 </interceptor-ref>
  24.                 <interceptor-ref name="debugging"/>
  25.                 <interceptor-ref name="deprecation"/>
  26.             </interceptor-stack>

  27.             <!-- The completeStack is here for backwards compatibility for
  28.                  applications that still refer to the defaultStack by the
  29.                  old name -->
  30.             <interceptor-stack name="completeStack">
  31.                 <interceptor-ref name="defaultStack"/>
  32.             </interceptor-stack>

    默认的拦截器为defaultStack,所以就有调用拦截器的顺序为exception、alias....,最后一个为deprecation
    在目标到达Action之前,还需要调用params拦截器:Parameters拦截器将把表单字段映射到ValueStack栈的栈顶对象的各个属性中。如果某个字段在模型里没有匹配的属性,Param拦截器将尝试ValueStack栈中的下一个对象。

0 0