Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 InternalResourceViewResolver without adding in some pattern matching hackery.

like image 597
Stefan Kendall Avatar asked Feb 24 '23 14:02

Stefan Kendall


1 Answers

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)

like image 182
Bozho Avatar answered Mar 07 '23 01:03

Bozho