2

URLの一部をStrutsのアクションパラメータに抽出するための適切なワイルドカードパターンを見つけるのに問題があります。

これが私がアクションを設定する方法です。このパターンの目的は、最後の2つのパス要素と、それらに先行する可能性のあるすべての要素をキャプチャすることです。

<action name="**/*/*" class="com.example.ObjectAction">
  <param name="filter">{1}</param>
  <param name="type">{2}</param>
  <param name="id">{3}</param>
</action>

URLを使用して呼び出すとchannels/123/transmissions/456、次の結果が得られます(アクションは、POJOに入力パラメーターを設定し、それをXMLとして返します)。

<result>
    <filter>channels/123/transmissions</filter>
    <id/>
    <type>456</type>
</result>

そのはず:

<result>
    <filter>channels/123</filter>
    <id>456</id>
    <type>transmissions</type>
</result>

さて、スラッシュを含む**すべての文字に一致するので、私のパターンではURLに一致する方法が複数あると思いますが、Strutsはたまたま空のままの文字を選択します。複数の可能な一致の動作はどこかで定義されていますか?パターンを曖昧さを少なくすることはできますか?これを行う別の方法はありますか?id

Struts2.0.8を実行しています。2.1.9にアップグレードすると正規表現が一致しますが、2.0.8を超えると、Strutsの依存関係とOSGi環境に問題が発生したため、今はそのバージョンを使用したいと思います。

4

2 に答える 2

0

その時点では、struts2 のワイルドカードは十分に成熟していなかったと思います。
ここここでは、より複雑なパターンに関するガイダンスは提供していません。しかし、スラッシュを含む**すべてに一致するため、struts2 は最後のスラッシュまでのすべてを単位として扱い、最初のプレースホルダーに設定し、最後のワイルドカードを 2 番目のプレースホルダーに設定すると思います。そのため、3 番目のプレースホルダーは null のままです。 アップグレードすることをお勧めします (そして、あなたはそれを完全に知っています) struts 2.1+ は、あなたの場合により役立つ可能性のあるパターン マッチングを提供します。

于 2011-07-21T11:25:24.237 に答える
0

これは、構造体に固有のアドバイスというよりも一般的なアドバイスですが、ここで説明します。

URL に追加の / を追加すると (テスト構造のある時点で自動的に行われる可能性があります)、貪欲な結果が表示されます。

何らかの方法で、自分が思っている URL をリクエストしていることを再確認するか、+ を指定する方法があるかどうかを確認します (別名、空でない結果)。

編集: 全体的な質問に答えるには、パーサーが最初の「有効な」結果を返すことが多いため、一致が貪欲であるかどうかを判断するのは困難です。

于 2009-11-16T19:01:12.837 に答える