2011-04-05 81 views
4

我想本地化我的應用程序,如果我可以簡單地通過JSP解析器發送所有JS文件以訪問本地化包,那將會很好。春季3 - 通過JSP視圖解析器包括JavaScript?

現在,我只有這個:

<bean id="viewResolver" class= 
     "org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
    <property name="prefix" value="/WEB-INF/jsp/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

,我想知道是否有有通過InternalResourceViewResolver.js.jsp決心不以某種模式匹配兩輪牛車添加一個簡單的方法。

+0

你有什麼想做的事:爲每個語言(如屬性文件)一個js文件,或把一些語言dependen佔位在(一個)js文件? – Ralph 2011-04-15 13:22:27

回答

8

只要內容類型爲text/javascript,您實際上並不需要將.js文件存儲爲.js。但是,在你的.js文件的動態信息是錯誤的:

  • 不能正確緩存它們
  • 你可能會添加JSP邏輯在.js文件,這將是難以維持
  • 你不能使用抗衡交付網絡(如果需要)
  • (或許有更多的缺點到,我想不出現在)

相反,你應該初始化一些設置對象來自使用.js文件的jsp頁面。有關更多詳細信息,請參閱this answer

這是我的代碼中的一個具體(簡化)示例。這片段是在.jsp

<script type="text/javascript"> 
var config = { 
    root : "${root}", 
    language: "${user.language.code}", 
    currentUsername: "${user.username}", 
    messages : { 
     reply : "${msg.reply}", 
     delete : "${msg.delete}", 
     loading : "${msg.loading}", 
    } 
}; 
init(config); 
</script> 

init(config)是在.js文件,只是設置的配置對象作爲全局變量。 (我實際上有一些默認值,但沒關係)

+0

動態信息將是本地化和用戶名稱參數化,但我猜這確實會阻止緩存。 – 2011-04-14 20:59:29

+0

@Stefan Kendall我有同樣的情況。看看我稍後添加的代碼 – Bozho 2011-04-14 21:32:41

0

把所有的JavaScripts放在webapp/scripts下。然後編程該實施addResourceHandlers()方法添加到您的WebConfig.xml:

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "package.base.your") 
public class WebConfig extends WebMvcConfigurerAdapter { 

//your other WebMvcConfigurerAdapter class implementations here 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    //other handlers here 
    registry.addResourceHandler("/scripts/**").addResourceLocations("/scripts/**"); 
}