【7、通配符和动态方法调用】 通配符映射: 一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系通配符映射规则 1、若找到多个匹配, 没有通配符的那个将胜出 2、若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配 3、若 Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串… {0} 匹配整个 URI * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要用 \. ——————————————————————————————————————– 示例: 1、不同的action name 不同的action class 相同的action method 不同的result <!– <a href=”${pageContext.request.contextPath}/pattern/BookAction_add.action”> 图书</a><br> <a href=”${pageContext.request.contextPath}/pattern/UserAction_add.action”>用户</a><br> –> <action name=”*_add” class=”cn.itcast.struts2.pattern.{1}”> <result name=”success” type=”dispatcher”> <param name=”location”>/pattern/{1}.jsp</param> </result> </action> ——————————————————————————————————————–
2、相同的action name 相同的action class 不同的action method 相同的result <!– <a href=”${pageContext.request.contextPath}/pattern/BookAction_add.action”>图书添加</a><br> <a href=”${pageContext.request.contextPath}/pattern/BookAction_delete.action”>图书删除</a><br> –> <action name=”BookAction_*” class=”cn.itcast.struts2.pattern.BookAction” method=”{1}”> <result name=”success” type=”dispatcher”> <param name=”location”>/pattern/success.jsp</param> </result> </action> ——————————————————————————————————————– 3、不同的action name 不同的action class 不同的action method 不同的result <!– <a href=”${pageContext.request.contextPath}/pattern/BookAction_add.action”>图书添加</a><br> <a href=”${pageContext.request.contextPath}/pattern/BookAction_delete.action”>图书删除</a><br> <br> <br> <a href=”${pageContext.request.contextPath}/pattern/UserAction_add.action”>用户添加</a><br> <a href=”${pageContext.request.contextPath}/pattern/UserAction_delete.action”>用户删除</a><br> –> <action name=”*_*” class=”cn.itcast.struts2.pattern.{1}” method=”{2}”> <result name=”success” type=”dispatcher”> <param name=”location”>/pattern/{1}.jsp</param> </result> </action> ———————————————————————————————————————
——————————————————————————————————————— 4、动态方法调用!形式: 相同的action name 相同的action class 相同的 result method由页面中的路径表示 <!– 在动态方法调用中BookAction!add.action 【BookAction表示action中的name !后面的表示action中的method】–> <!– <a href=”${pageContext.request.contextPath}/pattern/BookAction!add.action”>图书添加</a><br>–> <!– <a href=”${pageContext.request.contextPath}/pattern/BookAction!delete.action”>图书删除</a><br>–> –> <action name=”BookAction” class=”cn.itcast.struts2.pattern.BookAction”> <result name=”success” type=”dispatcher”> <param name=”location”>/pattern/success.jsp</param> </result> </action> ———————————————————————————————————————— 5、全局结果当多个action中都使用到了相同result,这时我们应该把result定义为全局结果 <package ….> <!– 定义全局结果 写在package里面–> <global-results> <result name=”success” type=”dispatcher”>/pattern/successGlobal.jsp</result> </global-results> </package> 注:局部的会覆盖全局Struts2中 应用范围内action的实例,每个请求都会创建一个action实例===================================================================================================================
http://wenku.baidu.com/link?url=xN_lqvMWJLulV21HvTd365k7hHj_dBS3ilt0eCfU1Y_eVtE1BLJ4jK0JHWdsJNNssZzo8O7s2XOZL2GWjjaG3RIeJWN5isowTfCIaZFO7IO