当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下:
public class UserAction extends ActionSupport{ ...其他略去 /** * 添加用户的方法 * @return * @throws Exception */ public String add() throws Exception{ message="添加用户"; return SUCCESS; } public String del() throws Exception{ message="删除用户"; return SUCCESS; } public String edit() throws Exception{ message="编辑用户"; return SUCCESS; } }
我们保持struts.xml的配置不变,具体见上篇博客。
调用的页面index.jsp就采用action名+!+方法名称+后缀的格式来实现。
<body> <a href="user!add.action">添加用户</a><br> <a href="user!del.action">删除用户</a><br> <a href="user!edit.action">编辑用户</a> </body>
这种方法我们就能做到在一个action中动态调用多个方法。但是采用上面的写法容易出错,看着也必将麻烦,那可不可以直接写上具体要调用action中的方法名称呢,比如add.action?这时候我们就需要修改Struts的配置文件了,采用method属性来区分方法名称。
<struts> <package name="Struts2_006" extends="struts-default" > <action name="add" class="com.struts2.UserAction" method="add"> <result>/add_success.jsp</result> </action> <action name="del" class="com.struts2.UserAction" method="del"> <result>/add_success.jsp</result> </action> <action name="edit" class="com.struts2.UserAction" method="edit"> <result>/add_success.jsp</result> </action> </package> </struts>
通配符
通过method属性虽然可以简化页面的调用,但他使得Struts配置文件中配置了大量的action,而且这些action中的很多内容都是相同的。如何解决呢?引入通配符的用法就可以解决。
现在将Struts.xml文件进行修改
<package name="Struts2_006" extends="struts-default" > <action name="*user" class="com.struts2.UserAction" method="{1}"> <result>/add_success.jsp</result> </action> </package>
index.jsp页面也要进行修改
<a href="adduser.action">添加用户</a><br> <a href="deluser.action">删除用户</a><br> <a href="edituser.action">编辑用户</a>
比较这两种方式:若不使用通配符,配置文件会十分冗余,但有一个优点就是易于控制。而使用通配符使得配置文件中省去了重复多余的action配置。