簡體   English   中英

准備攔截器如何在struts2中工作?

[英]How prepare interceptor works in struts2?

請告訴我預備攔截器的工作原理,我現在正在使用它並發現了分段行為

prepare()
validate()
execute()

這些是方法

所以當我點擊請求時,它被調用了3次

prepare()
validate()
execute()
prepare()
validate()
execute()
prepare()
validate()
execute()

我不知道這是什么問題,根據我的理解,它應該只運行prepare方法並顯示預填充的數據表格,並且當用戶單擊Submit時,它應該提交數據。

請解釋

<action name="updatebusinessinfo" class="com.controller.UpdateBusinessDetails">

            <interceptor-ref name="params"/>
            <!--
            <interceptor-ref name="prepare"/> 

            <interceptor-ref name="basicStack"/>
            -->

            <interceptor-ref name="fileUpload">
                    <param name="maximumSize">2097152</param>
                    <param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">businessinfo.jsp</result>
            <result name="input">businessinfo.jsp</result>
            <result name="error">businessinfo.jsp</result>
        </action>

是的朋友,我在struts.xml文件中犯了錯誤。 現在,請告訴我我應該如何在prepare()方法中接收url參數? http://www.myweb.com/updatebusinessinfo/23

我嘗試跟隨但無法正常工作

<action name="updatebusinessinfo/*" class="com.controller.UpdateBusinessDetails">
<param name="id">{1}</param>

            <interceptor-ref name="params"/>
            <!--
            <interceptor-ref name="prepare"/> 

            <interceptor-ref name="basicStack"/>
            -->

            <interceptor-ref name="fileUpload">
                    <param name="maximumSize">2097152</param>
                    <param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">businessinfo.jsp</result>
            <result name="input">businessinfo.jsp</result>
            <result name="error">businessinfo.jsp</result>
        </action>

有關此問題的一些提示可能會在尋找有關“准備攔截器”信息的人們中派上用場:

  • struts2中的DefaultStack已經包含了Prepare攔截器,因此如果同時包含它們,則將有兩個調用prepare()。 通常您不想要那樣。
  • 在DefaultStack中,Prepare攔截器在Params攔截器之前被稱為,因此prepare()方法中不會包含請求參數。 如果您想在其中使用參數進行操作(例如,從具有ID的DB中獲取某些內容),則將無法執行。

查看此處以了解struts2中的基本/默認堆棧: http : //struts.apache.org/release/2.0.x/docs/struts-defaultxml.html

有一個“ paramsPrepareParamsStack”,它在Prepare之前和之后使用Params,因此您可以在prepare()中使用params。

好吧,沒有任何進一步的信息,很難說出發生的原因和原因。我們仍然希望您能提供有關您要執行的操作的更多詳細信息? 您要訪問的URL,有關配置的信息以及有關您應用程序的其他信息。

僅當您實現了Preparable接口時才調用prepare方法。簡而言之,它是一種init方法,它使我們可以在開始繁重的工作之前進行任何初始化工作。

准備方法將在執行方法之前調用。我建議您先了解准備方法的工作以及堆棧實際如何調用它。

以類似的方式,S2將調用您的操作類的validate方法(如果已實現),並將根據方法內部提供的實現來驗證數據。

這只是流程的概述,我仍然建議您提供有關您的上下文的更多信息,以獲得任何好的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM