2

com.example.common.action のすぐ下に「Index」という名前の Action クラスがあり、struts.xml のパッケージ ディレクティブで宣言され、名前空間に「/」があり、「struts」を拡張する @ParentPackage('default') アノテーションが付けられています。 -デフォルト"。また、@Result を宣言して、execute() メソッドによって返される文字列値に対応する jsp ファイルで応答するようにします。

struts.xml では、次の struts 設定が、convention-plugin に必要なその他の必要な構成と共に構成されます。

<constant name="struts.action.extension" value=","/>

/my_context/none_existing_path にアクセスすると、リクエストは明らかにこの Index クラスにヒットし、Index の @Result セクションで宣言された jsp の内容が返されます。ただし、/my_context/ を指定すると、次のエラーが表示されます。

HTTP ステータス 404 - コンテキスト パス [/my_context] に関連付けられた名前空間 [/] およびアクション名 [] にマップされたアクションはありません。

none_existing_path に一致するアクションがない /my_context/none_existing_path にアクセスすると Index クラスにフォールバックできるが、要求された URL が /my_context/ だけの場合にエラーが返される理由を知りたいです。

現在、convention-plugin 設定は次のように宣言されています。

<constant name="struts.convention.package.locators.basePackage" value="com.example"/>

<constant name="struts.convention.package.locators" value="action"/>

奇妙なことに、struts.convention.package.locators.basePackage の値を om.example.common に変更すると、検索範囲を絞り込むことで前述の Index ファイルがすぐに見つかり、/my_context/ を要求するとその内容が表示されます。 Index クラスの @Result セクションで宣言された jsps。ただし、アクション クラスは com.example.[az].action パッケージ全体に分散されているため、[az] はパッケージ構造内にある大量のディレクトリを表すため、このトリックを回避策として使用することはできません。また、index.jsp をクラス パスのトップ レベルに配置して、index.jsp を /my_context/index にリダイレクトすることも試みましたが、これは機能しましたが、必要なものではありませんでした。これはバグでしょうか?

ご回答ありがとうございます。前もって感謝します。

編集: JIRA 登録、問題解決 (Struts 2.3.12 以降)

4

1 に答える 1

0

struts.convention.redirect.to.slash を false に設定してみて、それが役立つかどうかを確認してください。

<constant name="struts.convention.redirect.to.slash" value="false" />
于 2013-02-12T07:53:11.350 に答える