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对象。刷新或者回车
by hacket