12

いくつかのJavaScriptファイルをパッケージの1つに入れて、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

4

2 に答える 2

8

Struts2は、箱から出して静的コンテンツを提供できます。デフォルトでは、静的コンテンツはDefaultStaticContentLoaderの実装によって提供されStaticContentLoaderます。次のパッケージを自動的に検索します。

  • org.apache.struts2.static
  • レンプレート
  • 静的
  • org.apache.struts2.interceptor.debugging

「packages」という名前のfilterinitパラメーターで検索するパッケージを追加できます。

<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

1つの方法は、テンプレート全体を拡張し、すでに提案したように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)

ストラット

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