2012-03-31 5 views
4

Spring MVC 3.1アプリケーションでは、 "< mvc:annotation-driven />"を使用できないと思います。どうして? にすべてののインターセプタを適用したいので、 "< mvc:resources"要素を除くマッピング。私はインターセプタがリソースに適用したくないのでSpring MVC 3.1で<mvc:annotation-driven />のないFlashスコープ(とRedirectAttributes)を使用する

<mvc:annotation-driven /> 

<mvc:resources order="-10" mapping="/public/**" location="/public/" /> 
<mvc:resources order="-10" mapping="/favicon.ico" location="/public/favicon.ico" /> 
<mvc:resources order="-10" mapping="/robots.txt" location="/public/robots.txt" /> 
<mvc:resources order="-10" mapping="/humans.txt" location="/public/humans.txt" /> 

<mvc:interceptors> 
    <mvc:interceptor> 
    <mvc:mapping path="/**"/> 
    <bean class="com.my.Interceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors> 

をしてにインターセプタを適用するマッピングのパスを指定する方法は、(私が思う)ありません。だから私は使用できません。これ以外は全てです。

したがって、自分でRequestMappingHandlerMappingを追加して、インターセプタをグローバルに指定する必要がありません。注釈駆動型/>要素:のでthisthis< MVCを維持しながら、私は単に私自身のRequestMappingHandlerMappingを定義することはできませんようです!

だから... ... some helpで、私は< MVCを取り除くことができました:注釈ドリブン/>要素とほとんどすべては今うまく動作します。私は私のリソース以外のすべてに私のインターセプターを適用しました。すべてがうまくいきます、を除き、フラッシュ範囲

@RequestMapping(value="/test", method=RequestMethod.POST) 
public String test(Model model, RedirectAttributes redirectAttrs) 
{ 
    redirectAttrs.addFlashAttribute("myKey", "my message"); 
    return "redirect:test2"; 
} 

@RequestMapping(value="/test2") 
public String test2(Model model, HttpServletRequest request) 
{ 
    Map<String, ?> map = RequestContextUtils.getInputFlashMap(request); // map is NULL 
    System.out.println(model.containsAttribute("myKey")); // Prints FALSE 
} 

フラッシュマップがNULLであると私のモデルは、私の変数が含まれていません。私が< mvc:annotation-driven />要素で試してみるとうまくいきます!だから私の質問は:何がフラッシュ範囲を動作させるために私の文脈から欠けている?

また、 "org.springframework.web"をDEBUGログレベルに設定しようとしましたが、リダイレクト後にFlashMapまたはFlashMapManagerに関連するログは記録されません。必要な豆が欠けているようです。ここで

は私のコンテキストファイルの興味深い部分です:

<!-- commented! --> 
<!-- <mvc:annotation-driven /> --> 

<bean id="baseInterceptor" class="com.my.Interceptor" /> 

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="order" value="0" /> 
    <property name="interceptors"> 
     <list> 
      <ref bean="conversionServiceExposingInterceptor" /> 
      <ref bean="baseInterceptor" /> 
     </list> 
    </property> 
</bean> 

<bean id="myRequestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="conversionService" ref="conversionService" /> 
      <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 
<bean id="conversionServiceExposingInterceptor" class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor"> 
    <constructor-arg ref="conversionService" /> 
</bean> 

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:/messages/messages" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</bean> 

<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"></bean> 

<mvc:resources order="-10" mapping="/public/**" location="/public/" /> 
<mvc:resources order="-10" mapping="/favicon.ico" location="/public/favicon.ico" /> 
<mvc:resources order="-10" mapping="/robots.txt" location="/public/robots.txt" /> 
<mvc:resources order="-10" mapping="/humans.txt" location="/public/humans.txt" /> 

動作するフラッシュスコープのために不足していますか?

更新:解決策の答えを見てください...実際には何も見つかりませんでした。セッションだけが正しく動作していなかったので、動作させる方法を見つけました。

答えて

2

フラッシュスコープが機能しないために欠けている!これに代えて

public String test2(Model model, HttpServletRequest request, HttpSession session) 

::私はフラッシュ変数にアクセスするアクションで

は(ページ上のリダイレクトがにつながる)、私はこれを使用する必要が

public String test2(Model model, HttpServletRequest request) 

それはと思われますこれはSessionを正しく動作させるため、Flashスコープも正しく動作します!どうして?私は知らない...

+0

SpringMVC 4.1.xでは、Springのdocに示されているように、 'Model'から直接フラッシュ属性にアクセスするのに何の問題もありません:"入力 " からのリダイレクト属性の後で、FlashMapが自動的にコントローラ提供のモデルに追加されますターゲットURL "、それは、SpringMVCがセッションを利用してフラッシュ属性を格納するのは真実です。 –

0

それはあなたがする必要があるすべてのように見えるがflashMapManagerのBean名でフラッシュマップマネージャを登録することであり、それが自動的に初期化し、あなたのディスパッチャサーブレットで慣れる必要があります:私は最終的に何であったか見つけ

<bean name="flashMapManager" class="org.springframework.web.servlet.support.DefaultFlashMapManager/> 
+0

それは何も変わっていないようだが、アイデアに感謝する。 – electrotype

関連する問題