0

search?q=blah私の以前の質問をフォローアップすると、URL のような URLがクエリに変換される私の struts プロジェクトで、URL 書き換えがある程度正しく機能するようになりましたsearch.action?q=blahこれにはUrlRewriteFilterを使用します。これはストラットにうまく転送されるように見えますが (FORWARD でフィルター マッピングがあることを確認した場合)、ParametersIntercepter実行時にすべてのパラメーターを 2 回キャッチし、間にコンマを追加しているようです。したがって、次のようになります。

search.action?q=blah

Criteria オブジェクト (詳細を参照) のパラメーター q を次のように設定します。

[ blah, blah ]

パラメータはModelDriven<Criteria>Where Criteria を使用して設定されます。これは、GET 文字列から設定される一連のプロパティを持つ単純なクラスです。

なぜこれが起こっているのかを説明するのに途方に暮れています。誰もこのようなものを見たことがありますか?フィルター/インターセプターに関して何か間違ったことをしていますか?

編集: ParametersInterceptorActionContext オブジェクト内に含まれるパラメーターを設定するだけのようです。これらの値が ActionContext のどこに設定されているかわかりません (また、それを示すデバッグ メッセージも表示されません)。これがどのように機能するのかを明確にしたい人はいますか?

4

2 に答える 2

0

追加の情報にまだ興味があるかもしれない場合に備えて、Struts2 の最新バージョン (つまり、2.1.?) が.actionアクションに拡張を課していないことをご存知ですか? 実際、拡張機能はまったく必要ありません。

私の記憶が正しければ、唯一の要件は、 でweb.xml、Struts2 フィルター ( org.apache.struts2.dispatcher.FilterDispatcher) を url-pattern にマップすることです。/*

<filter-mapping>
   <filter-name>action2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

それ以降、<s:url>拡張子が空のページに表示されるタグは、拡張子のない URL を生成します...

于 2009-03-19T03:44:04.947 に答える
0

上記の奇妙な動作は解決していませんが、URL の書き換えで、「mySearch.action」ではなく「mySearch.action?」にリダイレクトされるページのエラーを見つけることができました。現在、固定ルールで URL 書き換えを使用し、クエリ パラメータを含めないで問題なく動作するようです。

編集:私は最終的に、REQUEST と FORWARD の両方をリッスンするように設定されている urlrewritefilter の問題を突き止めました。どうやらこれにより、GET パラメータが 2 回解析されるようです。ただし、クエリパラメーターはまだ含めていないため(通常はとにかく混乱するため)、これで問題が完全に解決されない可能性があります。しかし、それは最も可能性の高い犯人です。

特に、フィルター マッピングは次のようになります。

<filter-mapping>
     <filter-name>UrlRewriteFilter</filter-name>
     <url-pattern>/*</url-pattern>
     <dispatcher>REQUEST</dispatcher>
</filter-mapping>
于 2009-02-24T09:21:24.590 に答える