我想将一些 JavaScript 文件放入我的一个包中,并让 Struts 为它们提供服务 /struts/js/foo.js

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

所以问题是:如何告诉 Struts 在以下位置提供文件服务 org.foo.some.package.js 作为 /struts/js/whatever.js?

有帮助吗?

解决方案

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

  • 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

其他提示

一个办法是扩大整个模板和改变TEMPLATEDIR因为你已经建议。除非一个需要实现一个自定义模板,这是高过杀。

但是,最好的方式是IMHO忘记/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)

<强> Struts的

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top