12

我想将一些 JavaScript 文件放在我的一个包中,并让 Struts 像这样为它们服务/struts/js/foo.js

Struts 对“模板”包中的文件执行此操作(这是 jQuery 插件文件所在的位置,由struts.ui.templateDir选项保护)。但是我想将这些文件放入另一个包中;如果我重新定义struts.ui.templateDir,那么 struts 将停止工作,因为它找不到它的模板。

所以问题是:如何告诉 Struts 以org.foo.some.package.jsas形式提供文件/struts/js/whatever.js

4

2 回答 2

8

Struts2 可以提供开箱即用的静态内容。默认情况下,静态内容DefaultStaticContentLoaderStaticContentLoader. 它会自动搜索以下包:

  • org.apache.struts2.static
  • 模板
  • 静止的
  • org.apache.struts2.interceptor.debugging

您可以在名为“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
于 2013-12-05T10:27:32.323 回答
3

一种方法是扩展整个模板并按照您的建议更改 templateDir。除非需要实现自定义模板,否则这是非常过分的。

但恕我直言,最好的方法是忘记/struts/js/foo.js并使用任何其他 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)

支柱

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>
于 2013-12-04T14:24:35.513 回答