當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>
~~~
method屬性
這種方法我們就能做到在一個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配置。