正文

Action - 高级2007-03-13 09:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23895.html

分享到:

Action类有以下七种:
org.apache.struts.action.Action
常规Action。
1. org.apache.struts.actions.ForwardAction
因为所有请求都需要经过控制器,所以直接链接到JSP将违反MVC原理。通过ForwardAction将请求链接到JSP页面。
在struts-config.xml中创建一个请求映射,并指定将转到的位置。
struts-config.xml:
  <action-mappings >
    <action forward="/action/for.jsp" path="/for" />
  </action-mappings>
org.apache.struts.actions.IncludeAction
功能与ForwardAction功能相似,但不是转到指定页面,而是包含指定页面。
struts-config.xml:
  <action-mappings >
    <action include="/action/in.jsp" path="/in" />
  </action-mappings>
org.apache.struts.actions.DispatchAction
能将一系列相关功能模块化到一个操作中。无须为每个操作创建单独的action。
如:无须创建类AddUserAction、UpdateUserAction、RemoveUserAction,可以通过扩展DispatchAction,创建具有以下方法的UserAction类:add()、update()、remove()。
运行时,DispatchAction根据请求参数决定调用哪个方法,请求参数名在struts-cofig.xml中定义:
struts-config.xml:
  <action-mappings >
    <action
      parameter="ac"
      path="/dis"
      type="com.yourcompany.struts.action.DisAction" />
  </action-mappings>
此处,请求参数为”ac”。
若请求Url 为:http://localhost/minihr/dis.do?ac=add,则执行DisAction中的add()方法。
若请求Url 为:http://localhost/minihr/dis.do?ac=update,则执行DisAction中的update()方法。
org.apache.struts.actions.LookupDispatchAction
同一个请求路径不同请求参数被ActionMapping根据不同的请求参数进行不同的处理。
继承自org.apache.struts.actions.DispatchAction的一个抽象类。
当一个HTML 表单中包含有多个名称相同而值不同的提交按扭时此它将发挥它的作用。
按扭的名称由对应的ActionMapping的parameter属性指定。
首先在struts-config.xml中配置action:
struts-config.xml:
   <action path="/test"
           type="org.example.MyAction"
           name="MyForm"
          scope="request"
          input="/test.jsp"
      parameter="action"/>
用请求参数action的值定位应用程序资源束中的键。如:ApplicationResources.properties中有如下的键值对:
    button.add=Add Record
button.delete=Delete Record
JSP中提交按扭的格式如下:
   <html:form action="/test">
    <html:submit property="action">
      <bean:message key="button.add"/>
    </html:submit>
    <html:submit property="action">
      <bean:message key="button.delete"/>
    </html:submit>
  </html:form>
org.apache.struts.actions.LookupDispatchAction 的子类org.example.MyAction必须实现getKeyMethodMap()方法和在map中定义的方法。下面给出一个例子:
  protected Map getKeyMethodMap() {
      Map map = new HashMap();
      map.put("button.add", "add");
      map.put("button.delete", "delete");
      return map;
  }

  public ActionForward add(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)
          throws IOException, ServletException {
      // do add
      return mapping.findForward("success");
  }

  public ActionForward delete(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)
          throws IOException, ServletException {
      // do delete
      return mapping.findForward("success");
  }
注意:如果getKeys方法返回的keys中有重复的值,则使用最先找到的。如果一个都没有找到,则抛出异常。
org.apache.struts.actions.MappingDispatchAction(since struts1.2)
不同请求路径被各自的ActionMapping通过调用同一个action处理自己的请求。action根据不同的ActionMapping的paramater参数来决定调用哪个方法。有助于开发人员将多个Action合并到一个Action里。
要使用这个Action。须在你的struts-config.xml中创建自己的<action/>,如:
   <action path="/saveSubscription"
           type="org.example.SubscriptionAction"
           name="subscriptionForm"
          scope="request"
          input="/subscription.jsp"
      parameter="method"/>
method代表你在MappingDispatchAction中定义的方法,如:
org.example.SubscriptionAction.java:
public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
那么你需要在struts-config.xml中创建如下的<action/>:
  <action path="/createSubscription"
          type="org.example.SubscriptionAction"
          parameter="create">
      <forward name="success" path="/editSubscription.jsp"/>
  </action>

  <action path="/editSubscription"
          type="org.example.SubscriptionAction"
          parameter="edit">
      <forward name="success" path="/editSubscription.jsp"/>
  </action>

  <action path="/saveSubscription"
          type="org.example.SubscriptionAction"
          parameter="save"
          name="subscriptionForm"
          validate="true"
          input="/editSubscription.jsp"
          scope="request">
      <forward name="success" path="/savedSubscription.jsp"/>
  </action>
注意:不同于DispatchAction,你可以为各自的请求路径定义个字的form bean可验证机制。
org.apache.struts.actions.SwitchAction
用于切换到另一个新的模块(由prefix指定)并跳转到新模块里的URL(由page指定)。
参数prefix指定要切换到的新模块,以“/”开头。
参数page指定在新模块里的跳转的URL目标位置,以“/”开头。
要使用SwitchAction,必须在struts-config.xml中创建一个新的映射条目:
<action-mappings>
  <action path=”/anathormodule”
    type=” org.apache.struts.actions.SwitchAction”/>
</action-mapping>
如果请求URL如下:
http://localhost/minihr/anathormodule.do?prefix=/student&page=/title.do
则URI将切换到anathormodule模块,然后转到新模块的title.do页面。
org.apache.struts.actions.LocaleAction
Action的子类。
功能是改变用户的Locale信息并跳转到另外的页面。
此Action在form bean里查找language和country属性值用于构建一个Locale对象。form bean可以是任何的ActionForm,包括DynaActionForm.。
如果form bean还设置了page属性,则控制器将跳转到page指定的URI路径,否则跳转到”success”指定的路径

阅读(1990) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册