Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring3-通过JSP视图解析器包含javascript?_Javascript_Spring_Jsp_Spring Mvc_Localization - Fatal编程技术网

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

Spring3-通过JSP视图解析器包含javascript?,javascript,spring,jsp,spring-mvc,localization,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.vie

我正在尝试本地化我的应用程序,如果我可以通过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
解析,而无需添加一些模式匹配黑客。

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

  • 无法正确缓存它们
  • 您可能想在.js文件中添加jsp逻辑,这将很难维护
  • 您不能使用竞争交付网络(如果需要)
  • (也许还有更多的缺点,我现在想不出来)
相反,您应该从使用.js文件的jsp页面初始化一些设置对象。有关更多详细信息,请参阅

下面是我代码中的一个具体(简化)示例。此代码段位于
.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>

变量配置={
根:“${root}”,
语言:“${user.language.code}”,
currentUsername:“${user.username}”,
信息:{
答复:“${msg.reply}”,
删除:“${msg.delete}”,
正在加载:“${msg.loading}”,
}
};
初始化(配置);

init(config)
位于
.js
文件中,只是将config对象设置为全局变量。(我实际上有一些默认值,但这并不重要)

将所有Java脚本放在
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/**");
}

动态信息将是本地化和用户名参数化,尽管我想这确实会阻止缓存。@Stefan Kendall我也有同样的情况。看一看我稍后要添加的代码,您想做什么:为每种语言创建一个js文件(如属性文件),或者在一个js文件中添加一些语言相关占位符?