Spring 3 - 通过JSP视图解析器包含javascript?

时间:2011-04-05 21:23:16

标签: javascript spring jsp spring-mvc localization

我正在尝试本地化我的应用程序,如果我可以通过JSP解析器简单地发送所有JS文件来访问本地化包,那就太好了。

现在,我有这个:

<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>

我想知道是否有一种简单的方法让.js.jsp通过InternalResourceViewResolver解决而不添加一些模式匹配hackery。

2 个答案:

答案 0 :(得分:8)

您实际上不需要将.js个文件存储为.js,只要其内容类型为text/javascript即可。但是在.js文件中包含动态信息是错误的:

  • 您无法正确缓存它们
  • 你可能想在.js文件中添加jsp逻辑,这很难维护
  • 您无法使用竞争传递网络(如果需要)
  • (也许还有更多的缺点,我现在想不到)

相反,您应该从使用.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文件中,只是将配置对象设置为全局变量。 (我实际上有一些默认值,但这没关系)

答案 1 :(得分: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/**");
}