2

インターセターの準備がどのように機能するか教えてください

prepare()
validate()
execute()

これらはメソッドです

そのため、リクエストをヒットすると、3回呼び出されました

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

何が問題なのかわからない私の理解によれば、準備メソッドを実行して事前入力されたデータフォームを表示し、ユーザーが送信をクリックするとデータを送信する必要があります。

説明してください

<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>
4

2 に答える 2

3

Prepare Interceptor に関する情報を探している人に役立つかもしれない、この問題に関するいくつかのヒント:

  • struts2 の DefaultStack には既に Prepare インターセプターが含まれているため、両方を含めると、prepare() を 2 回呼び出すことになります。通常、あなたはそれを望んでいません。
  • DefaultStack では、Prepare インターセプターは Params インターセプターの前に呼び出されるため、prepare() メソッドに要求パラメーターはありません。そこでパラメーターを使用して何かをしたい場合 (たとえば、ID を使用して DB から何かをフェッチする) はできません。

struts2 の基本/デフォルト スタックの内容を確認するには、こちらを参照してください: http://struts.apache.org/release/2.0.x/docs/struts-defaultxml.html

Prepare の前後に Params を使用する「paramsPrepareParamsStack」があるため、prepare() に params があります。

于 2013-04-09T08:13:53.970 に答える
1

これ以上の情報がなければ、何がなぜこれが起こっているのかを判断するのは非常に困難です。アクセスしている URL、構成に関する情報、およびアプリケーションに関するその他の情報。

Prepare メソッドは、Preparable インターフェイスを実装している場合にのみ呼び出されます。要するに、実際の重い作業が開始される前に初期化作業を行うことができる一種の init メソッドです。

Prepare メソッドは、execute メソッドの前に呼び出されます。Prepare メソッドの動作と、スタックによって実際にどのように呼び出されるかを確認することをお勧めします。

同様の方法で、S2 はアクション クラスの validate メソッドを実装している場合はそれを呼び出し、メソッド内で提供される実装に従ってデータを検証します。

これはフローの概要にすぎません。適切な入力を得るために、コンテキストの詳細情報を提供することをお勧めします。

于 2012-05-28T14:36:13.270 に答える