2015年9月19日 星期六

動態方法(DMI)調用與通配符映射 (Struts2.3.x 七)

新寫一支Action,就叫CRUDAction.java好了
public class CRUDAction extends ActionSupport {
    public String insert() {
        System.out.println("增");
        return null;
    }

    public void delete() {
        System.out.println("刪");
    }

    public void update() {
        System.out.println("改");
    }

    public List<String> query() {
        System.out.println("查");
        return null;
    }
}
注意不用覆寫execute()了,而要動態調用裡面的方法,方法不能有參數
struts.xml
<action name="crudI" class="action.CRUDAction" method="insert"/>
<action name="crudD" class="action.CRUDAction" method="delete"/>
<action name="crudU" class="action.CRUDAction" method="update"/>
<action name="crudQ" class="action.CRUDAction" method="query"/>

此時在網址列上的最後面打
.crudI.action可以調用到insert方法
.crudD.action可以調用到delete方法
.crudU.action可以調用到update方法
.crudQ.action可以調用到query方法

但這樣子寫太累了,所以有一種動態的調用方法出來了
想使用動態方法,必須增加這一行,預設是false,所以要改成true,和package同層
<constant name="struts.enable.DynamicMethodInvocation" value="true" />

然後將action修改如下
<action name="crud*" class="action.CRUDAction" method="{1}"/>

此時在網址列上的最後面打
.crud!insert.action可以調用到insert方法
.crud!delete.action可以調用到delete方法
.crud!update.action可以調用到update方法
.crud!query.action可以調用到query方法

{0}代表URL本身,還有{1}~{9}可以用,一個星號對應一個{n}
所以假設crud!insert.action,*變成了insert,所以{1}也變成insert,所以就去調用insert方法了
更詳細可到這裡參考

沒有留言:

張貼留言