2012-09-12 59 views
0

我被困在一些非常痛苦的事情。 我正在嘗試使用Spring WebMVC的主題。Spring MVC ThemeChangeInterceptor不改變主題

這是我的web-context.xml文件的末尾:

<beans:bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" > 
    <beans:property name="paramName" value="theme" /> 
</beans:bean> 
<beans:bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource"> 
    <beans:property name="basenamePrefix" value="theme-" /> 
</beans:bean> 
<beans:bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver" > 
    <beans:property name="defaultThemeName" value="default" /> 
</beans:bean> 
<beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <beans:property name="interceptors"> 
     <beans:list> 
      <beans:ref bean="themeChangeInterceptor" /> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

在我的頭文件,我有這樣的:

<span style="float: right"> 
     <a href="?theme=default">Default</a> 
     | 
     <a href="?theme=other">Other</a> 
</span> 

而結束,我的HTML頭有(所有視圖導入):

<link rel="stylesheet" href="<spring:theme code="css"/>" type="text/css" /> 

我在src/main/resources中得到了兩個屬性文件,這導致了我的css。例如在theme-default.properties中,有:

css=static/css/dev.css 

我的CSS位於src/webapp/static/css /中。 當我第一次加載網站時,主題是默認的,所以我認爲屬性文件和CSS是由主題解析器正確找到的。 但是當我點擊標題中的Default或Other時,什麼也沒有發生。

你知道問題在哪裏嗎?

非常感謝你事先! Olivier。

回答

2

我想你錯誤地註冊了攔截器。如果使用<mvc:annotation-driven/>配置Spring-MVC,那麼單獨使用handlerMapping將不起作用,因爲缺省handlerMapping也由定製mvc名稱空間註冊。嘗試以下面的方式註冊它:

<mvc:interceptors> 
    <ref bean="themeChangeInterceptor"/> 
</mvc:interceptors> 
+0

我終於擴展了ThemeResolver類本身以實現我期望的行爲。 –

0

您應該有<mvc:interceptors>聲明。並且你的ThemeChangeInterceptor bean應該在那裏

<mvc:interceptors> 
     <beans:bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
      <beans:property name="paramName" value="lang" /> 
     </beans:bean> 
     <beans:bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"> 
      <beans:property name="paramName" value="theme" /> 
     </beans:bean> 
</mvc:interceptors> 
+0

爲了達到我期望的行爲,我最終擴展了ThemeResolver類本身。我認爲在我的服務模塊中實現的一些攔截器與ThemeChangeInterceptor發生衝突...... –