struts2通配符和动态方法调用

通配符举例--BookAction

 1 public class BookAction extends ActionSupport {
 2 
 3     public String execute() throws Exception {
 4         System.out.println("BookAction ********** execute()");
 5         return null;
 6     }
 7     /*
 8      * 显示图书添加页面
 9      */
10     public String add(){
11         System.out.println("显示图书添加页面");
12         return "add";
13     }
14 }

通配符举例--struts-pattern.xml

 1 <struts>
 2    <package name="pattern" namespace="/pattern" extends="struts-default">
 3 
 4    <!-- method:指定执行调用action中的方法,如果不加该属性,默认调用action中的execute()方法 -->
 5       
 6       <action name="BookAction" class="cn.itcast.pattern.BookAction" method="add">
 7          <result name="add">/pattern/BookAction.jsp</result>
 8       </action>
 9    </package>
10 </struts>

通配符举例—BookAction如何自定义方法

在action中增加新的方法的要求:

• 方法最好要用public修饰
• 方法的名称自定义
• 方法没有参数
• 方法的返回值为String

要定义的方法就是与execute方法的方法名称不同,其他的都一样,只有这样的定义方法struts2才识别

通配符映射

  

动态方法调用-这种方式不常用

•动态方法调用: 通过 url 动态调用 Action 中的方法

  如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法

默认情况下, Struts 的动态方法调用处于激活状态, 若想禁用该功能, 则可以在 struts.xml 文件中添加如下 constant 元素:

  <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

  Jsp页面的代码:

1      动态方法调用!形式:<br>
2     <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br>
3     <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br>

 

Action代码:

 1 import com.opensymphony.xwork2.ActionSupport;
 2 
 3 @SuppressWarnings("serial")
 4 public class BookAction extends ActionSupport {
 5         public String add(){
 6         System.out.println("BookAction...add()");
 7         return "add";
 8     }    
 9     public String delete(){
10         System.out.println("BookAction...delete()");
11         return "success";
12     }
13 }

  Action配置:

1 <action name="BookAction" class="cn.zengfansheng.struts.pattern.BookAction">
2          <result name="add">/pattern/BookAction.jsp</result>
3          <result name="success">/pattern/success.jsp</result>
4 </action>

使用通配符定义action-相对于动态方法调用,开发中比较常用这种方式调用action中的方法

  jsp页面代码:

1     动态方法调用!形式:<br>
2     <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br>
3     <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br>

  Action配置:

1 <action name="*_*" class="cn.zengfansheng.struts.pattern.{1}" method="{2}">
2              <result name="add">/pattern/{1}.jsp</result>
3              <result name="success">
4                  <param name="location">/pattern/success.jsp</param>
5              </result>
6 </action>

全局结果

  当多个action中都使用到了相同result,这时我们应该把result定义为全局结果

1 <package ....>
2     <global-results>
3         <result name="message">/message.jsp</result>
4     </global-results>
5 </package>

  注:局部的会覆盖全局-但全局和局部同时存在时,局部的会覆盖全局的。

全局结果和局部结果的区别:
  * 全局结果:对该包下所有的action配置起作用
  * 局部结果:只对当前的action起作用

   Struts2中 应用范围内action的实例,每个请求都会创建一个action实例-也就是对于每一个请求都会new一个Action对象。刷新或者回车

原文地址:https://www.cnblogs.com/hacket/p/3079050.html