Struts2攔截器棧的例子
很多時候,相同的一組攔截器可以適用於不同的動作類,例如,
<action name="checkInAction"
class="com.yiibai.common.action.CheckInAction" >
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<interceptor-ref name="defaultStack" />
<result name="success">/pages/checkIn.jsp</result>
</action>
<action name="checkOutAction"
class="com.yiibai.common.action.CheckOutAction" >
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<interceptor-ref name="defaultStack" />
<result name="success">/pages/checkOut.jsp</result>
</action>
在上述情況下,它有許多重複工作以及不能重複使用。
幸運的是,在Struts 2自帶的攔截器棧,使開發人員建立一組攔截到一個單元名爲「棧名字」, 和可以通過「棧名字」引用操作它。
最佳做法
建議組合相同的一組攔截器到一個攔截器棧擺脫重複的工作,並增加了項目的可重用性。
<interceptors>
<interceptor-stack name="defaultStackWithLog">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="checkInAction"
class="com.yiibai.common.action.CheckInAction" >
<interceptor-ref name="defaultStackWithLog"/>
<result name="success">/pages/checkIn.jsp</result>
</action>
<action name="checkOutAction"
class="com.yiibai.common.action.CheckOutAction" >
<interceptor-ref name="defaultStackWithLog"/>
<result name="success">/pages/checkOut.jsp</result>
</action>
在上面的例子更新,聲明一個攔截器棧,命名爲「defaultStackWithLog」其中包括「timer「, 「logger」 和 「defaultStack」 攔截器,並且它通過「interceptor-ref」元素引用一個正常的攔截器。
參考
0 條評論,你可以發表評論,我們會進行改進
