0

Struts では、struts 構成ファイルでコントローラーの成功ビューと失敗ビューを次のように定義することがよくあります。

<action path="/Home" type="org.sample.HomeAction">
<forward name="success" path="/views/Home.jsp"/>
<forward name="failure" path="/views/Error.jsp"/>
</action>
<action path="/AddCustomer" type="org.sample.AddCustomerAction">
<forward name="success" path="/views/AddCustomer.jsp"/>
<forward name="failure" path="/views/AddCustomerError.jsp"/>
</action>

これを行うと、同じ論理ビュー名 (成功と失敗) が、呼び出し元のコントローラーに応じて異なる jsps に解決される可能性があります。対照的に、最も単純なスプリング セットアップでは、ビュー リゾルバーはグローバルです。Spring MVC でこの種の構成を複製する最も簡単な方法は何ですか?

getFormView() および getSuccessView() メソッドを持つ SimpleFormController を使用する方法があることはわかっていますが、そのクラスから継承しなければならないという制限は避けたいと思います。コントローラー固有のビュー解決を行うためのより一般的な方法はありますか?

私が調査しているシナリオは、大量の Struts コードを Spring に移行することです。古いコードでは、「成功」と「失敗」が広範に使用されています。理想的には、既存の Spring ビュー リゾルバーを使用して、同じ構成をレプリケートするだけです。例えば

<bean class="some.spring.view.resolver">
    <property>
        <controller name="org.sample.HomeAction">
             <view name="success" value="/views/Home.jsp"/>
             <view name="failure" value="/views/Error.jsp"/>
        </controller>
        <controller name="org.sample.AddCustomerAction">
             <view name="success" value="/views/AddCustomer.jsp"/>
             <view name="failure" value="/views/AddCustomerError.jsp"/>
        </controller>               
</bean>

呼び出されたコントローラーに応じて、同じ論理ビュー名を異なる値に解決することをサポートする既存の Spring ビュー リゾルバーはありますか? または、独自に作成するか、論理ビュー名をグローバルに一意になるように更新する必要がありますか?

ありがとう。

4

1 に答える 1

0

コントローラーメソッドから別のビュー名を返すことができます:

@RequestMapping("/home")
public String home() {

  try {
   // Some logic

   return "home";
  } catch (Exception e) {
    return "error";
  }
}

これにより、コントローラー メソッドの呼び出し結果に応じて、適切な jsp ビューが解決されます。これは、アクション メソッドの結果を表す文字列を返す struts2 のアプローチと非常によく似ています。結果の文字列を jsp ビューにマップするための追加の xml は必要ありません。

于 2012-11-17T18:43:31.737 に答える