2

いくつかの「グローバル」モデル変数を追加するためのHandlerInterceptorがあります。できます。

同じ理由で、今はSpringWebFlowで再利用しようとしています。

ただし、HandlerInterceptorsでは、Spring Web FlowでModelAndViewパラメーターがNULLに設定されています(理由はわかりませんが、事実です)。

FlowHandlerMapping Beanでインターセプターを参照しました:

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> 
    <property name="order" value="0" /> 
    <property name="flowRegistry" ref="flowRegistry" />
    <property name="interceptors">
        <list>
            <ref bean="myInterceptor" />
        </list>
    </property>
</bean>

モデルに変数を追加するにはどうすればよいですか?

たとえば、リクエストパラメータを使用した回避策はありますか?

4

2 に答える 2

6

Spring Webflow 2 以降、ModelAndViewオブジェクトは生成されなくなりました ( SpringSource フォーラムのこの投稿(およびスレッド) を参照してください)。


FlowHandlerAdapterhandle() 関数は、この関数が:

public ModelAndView handle(HttpServletRequest request, 
        HttpServletResponse response, Object handler)

したがって、この関数をオーバーライドしても意味がありませんが、この関数はServletExternalContextメソッドを呼び出して、すべてのフロー変数を保持するオブジェクトを作成します。

protected ServletExternalContext createServletExternalContext(
    HttpServletRequest request, HttpServletResponse response)

この関数をオーバーライドすることで、このフロー変数で必要なことをほとんど行うことができます。


これを行うには、 を拡張するクラスを作成し、FlowHandlerAdapterそれを FlowHandlerAdapter の代わりに登録して、createServletExternalContext関数をオーバーライドします。

基本的に、プロパティServletExternalContext.getSessionMap()にアクセスしSharedAttributeMapて登録するために使用します。

HttpServletRequestおよびオブジェクトにアクセスできるためHttpServletResponse、このメソッドは関数のようにささいなことを行うことができHandlerInterceptorAdapter.postHandleます。

以下の例を参照してください。

HandlerInterceptorMVC とこのオブジェクトのa に同じコードを再利用する一般的な方法を使用する方法を省略しましたが、 を実装することで簡単にコーディングできますHandlerInterceptor


MyFlowHandlerAdapter :

package my.package;
public class MyFlowHandlerAdapter extends FlowHandlerAdapter {

    @Override
    protected ServletExternalContext createServletExternalContext(
            HttpServletRequest request,
            HttpServletResponse response) {

        ServletExternalContext context = 
            super.createServletExternalContext(request,response);

        context.getSessionMap().put("myproperty", "myvalue");

        return context;
    }
}

FlowHandlerAdapter次のように webflow-context.xml ファイルで定義されたオブジェクトがあります。

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor"/>
</bean>

に置き換えるだけです:

<bean class="my.package.MyFlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor"/>
</bean>
于 2012-11-17T14:41:02.237 に答える
0

ModelAndViewインターセプターがAjaxリクエストを処理しているときはnullになる可能性があります。

nullかどうかModelAndViewを確認してください。そうでない場合は、インターセプターがビューモデルを処理しているため、この時点で変数を追加できます。

于 2012-03-13T16:43:50.460 に答える