2011-04-05 63 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/**"); 
}