我想在我的一个软件包中放入一些JavaScript文件,让Struts像/struts/js/foo.js
Struts为'template'包中的文件执行此操作(这是jQuery插件的文件所在的位置,由struts.ui.templateDir
选项保护)。但是我想把这些文件放到另一个包中;如果我重新定义struts.ui.templateDir
,那么struts就会停止工作,因为它无法找到它的模板。
所以问题是:如何告诉Struts将org.foo.some.package.js
中的文件作为/struts/js/whatever.js
投放?
答案 0 :(得分:8)
Struts2可以提供开箱即用的静态内容。默认情况下,DefaultStaticContentLoader
StaticContentLoader
的实施正在为静态内容提供服务。它会自动搜索以下包:
您可以在名为" packages"的过滤器初始化参数中添加要搜索的其他包。
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>packages</param-name>
<param-value>some.package another.one</param-value>
</init-param>
</filter>
您可以添加多个包,使用逗号或空格或制表符或新行作为分隔符。
顺便说一句,您可以使用此常量控制浏览器是否正在缓存静态内容:
struts.serve.static.browserCache
答案 1 :(得分:3)
一种方法是扩展整个模板&amp;按照您的建议更改templateDir。除非需要实现自定义模板,否则这会非常过度。
但恕我直言的最好办法是忘记/struts/js/foo.js
&amp;使用任何其他URL来加载js。
几个样本:
<强> JSP 强>
WebPages
|-->myjs.js (a normal js file)
|-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
|-->WEB-INF-->xyz.js (another .js file but accessed only through action)
<强> Struts的强>
<action name="myacctionjs">
<result>/WEB-INF/xyz.js</result>
</action>