J2EE开发各类资源下载清单, 史上最全IT资源,个人收藏总结!
1. 动态方法调用
如果Action中存在多个方法时,我们可以使用"namespace+action名+!+方法名"调用指定方法。如http://localhost:8080/Struts2_03/user/userOperator!delete.action。但是struts2官方并不推荐这种方式,他推荐使用通配符的方式实现类似struts1.x的dispatchAction的功能。
默认情况下, Struts 的动态方法调用处于激活状态, 若想禁用该功能, 则可以在 struts.xml 文件中添加如下 constant 元素:
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
UserAction.java
struts-user.xml
当浏览器输入:http://localhost:8080/Struts2_03/user/userOperator(不写方法的话,默认调用method属性的方法) , .../user/userOperator!add,
.../user/userOperator!add.action
当浏览器输入:http://localhost:8080/Struts2_03/user/userOperator!delete, .../user/userOperator!delete.action
2. 通配符调用Action中的方法
可以在<action>的name属性中使用"*"通配符,然后在<action>class,method属性及<result>的name属性和<result>的值中通过"{通配符索引}"引用通配符"*"的值,如:
通配符映射
(1)一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
(2)通配符映射规则
- 若找到多个匹配, 没有通配符的那个将胜出
- 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配
- 若 Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出
- 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串,{0} 匹配整个 URI
- * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
通配符的使用
struts-product.xml
ProductAction.java
浏览器上输入:http://localhost:8080/Struts2_03/product/ope_Product_delete , .../product/ope_Product_delete.action
浏览器上输入:http://localhost:8080/Struts2_03/product/ope_Product_add , .../product/ope_Product_add.action
转发时,请注明来源:动态方法调用和使用通配符调用Action中方法