• Struts2 动态方法调用


    Struts2一个Action内包含多个请求处理方法的处理(三种方式)

     

    Struts1提供了DispatchAction,从而允许一个Action内包含多个请求处理方法。Struts2也提供了类似的功能。处理方式主要有以下三种方式:

     

    1.1. 动态方法调用:

     

    DMI:Dynamic Method Invocation 动态方法调用。

     

    动态方法调用是指:表单元素的action不直接等于某个Action的名字,而是以如下形式来指定对应的动作名:

     

    <form method="post" action="userOpt!login.action">

     

    则用户的请求将提交到名为”userOpt”的Action实例,Action实例将调用名为”login”方法来处理请求。同时login方法的签名也是跟execute()一样,即为public String login() throws Exception。

     

    注意:要使用动态方法调用,必须设置Struts2允许动态方法调用,通过设置struts.enable.DynamicMethodInvocation常量来完成,该常量属性的默认值是true。

     

    Struts 2 动态方法调用

     

    1.在jsp中如何得到Action的属性:

    (1).${requestScope.tip}

    (2).ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");

    vs.findValue("tip")

    2.动态方法调用

    动态方法调用是指,表单元素的action并不是直接等于某个Action的名字,而是以action='ActionName!methodName.action'来指定Form的属性.

    Action里可以包含一个execute()方法和多个其它逻辑.

    3.为action元素指定method属性

    即是将一个Action处理类定义成多个逻辑Action,指定action的method属性,则可以让action类来调用不同的方法.

    特点是只有一个action类,action类里有几个处理逻辑struts.xml里就包含着几个<action... />片断.也就是Action类的每个处理方法被映射成一个逻辑Action.

    缺点是多个action里定义的方法绝大部分相同,这种定义是相当冗余的.

    4.使用通配符

    在配置<action .../>元素时,需要指定name,class,method属性都可支持通配符,这种使用通配符的方式是另一种形式的动态方法调用.

    当我们使用通配符定义Action的name属性时,就相当于一个元素action定义了多个逻辑Action.

    (1).<action name="*Action" class="lee.loginRegistAction" method="{1}">....</action>

    只要URL是*Action.

     

    action的模式,都可以能过该Action类处理.

    但该method属性使用了一个表达式{0},该表达式的值就是name属性值中的第一个*的值.

    (2).<action name="*Action" class="lee.{1}Action">....</action>

    只要URL是*Action.action的模式,都能通过相应的ation类处理.

    如:URL为registAction.action,则调用lee.registAction类的excute方法来处理

  • 相关阅读:
    Luogu p2672 推销员 (贪心)
    HDU 1548 A strange lift (暴力搜索)
    HDU 1258 Sum it up (dfs)
    HDU 1087 FatMouse and Cheese (记忆化搜索)
    Beautiful Numbers(牛客)
    E. Product Oriented Recurrence(矩阵快速幂+欧拉降幂)
    Super A^B mod C FZU
    bitset入门 简单瞎搞题
    D. Dirty Deeds Done Dirt Cheap(思维)
    大家一起来数二叉树吧(DP)
  • 原文地址:https://www.cnblogs.com/ztca/p/8472584.html
Copyright © 2020-2023  润新知