Posted on 2007-09-14 15:06
它山の石 閱讀(6660)
評論(2) 編輯 收藏
最近在學習struts2,發現了很多驚喜,在設計上,確實很優秀,這兩天在研究怎么做出一個好的架構,以后好用。
今天看了包中的showcase例子,發現了一種新的配置action方法:
<action name="edit-*" class="org.apache.struts2.showcase.action.EmployeeAction">
<param name="empId">{1}</param>
<result>/empmanager/editEmployee.jsp</result>
<interceptor-ref name="crudStack">
<param name="validation.excludeMethods">execute</param>
</interceptor-ref>
</action>
當時昏了一下,用過這么多MVC的框架,第一次看到action還可以用*配的,很牛啊,自己配了一個,不好使,找原因,發現這里的EmployeeAction實現了com.opensymphony.xwork2.Preparable接口,并實現了prepare()方法,再試,成功。但發現個問題,如果這個action中還有其它的控制處理,而配置文件用的不是這種*形式,比如我的例子:
<action name="BookAction" class="com.sigon.crud.action.BookAction">
<result type="redirect">List.action</result>
</action>
<action name="Edit*" class="com.sigon.crud.action.BookAction" method="load">
<param name="isbn">{1}</param>
<result>Edit.jsp</result>
</action>
這里兩個action用的是一個action類文件,而且BookAction實現了上面所說的Preparable接口,這時就需要將BookAction中的isbn初始化,否則在頁面調用BookAction時出空指針異常
而在實際項目中,一個Action處理多個控制邏輯是家常便飯,如果還想用這種形式,就要在聲明isbn時賦初值,本例中是
private String isbn = "2";
很明顯,不穩妥。所以如何取舍,頗為困擾。
如果有哪位大俠有好的方法,敬請賜教。