开发者

Spring 3 - Including javascript through a JSP view resolver?

I'm trying to localize my application, and it would be nice if I could simply send all JS files through a JSP resolver to get access to localization bundles.

Right now, I just have this:

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

and I was wondering if there was an easy way to have both .js and .jsp resolve through the InternalResourceV开发者_StackOverflowiewResolver without adding in some pattern matching hackery.


You don't actually need your .js files to be stored as .js, as long as their content-type is text/javascript. But having dynamic information in your .js files is wrong:

  • you cannot cache them properly
  • you might be tempted to add jsp logic in the .js file, which will be hard to maintain
  • you cannot use contend-delivery networks (if needed)
  • (and perhaps there are more downsides to that, which I can't think of right now)

Instead, you should initialize some settings object from a jsp page that is using the .js file. See this answer for more details.

Here is a concrete (simplified) example from my code. This snippet is in the .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>

The init(config) is in the .js file, and is just setting the config object as a global variable. (I actually have some default values, but that doesn't matter)


Put all your javascripts under webapp/scripts. Then programmatically add this implementation of the addResourceHandlers() method to your 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/**");
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜