Служите статическим файлам (JavaScript) с помощью Struts 2 - PullRequest
12 голосов
/ 28 октября 2010

Я хочу поместить несколько файлов JavaScript в один из моих пакетов и сделать так, чтобы Struts обслуживал их как /struts/js/foo.js

Struts делает это для файлов в пакете 'template' (там находятся файлы плагина jQuery, защищенные опцией struts.ui.templateDir). Однако я хочу поместить эти файлы в другой пакет; Если я переопределю struts.ui.templateDir, то стойки перестают работать, потому что не могут найти свои шаблоны.

Итак, вопрос в том, как заставить Struts обслуживать файлы в org.foo.some.package.js как /struts/js/whatever.js?

.

Ответы [ 2 ]

8 голосов
/ 05 декабря 2013

Struts2 может доставлять статический контент из коробки. По умолчанию статический контент обслуживается DefaultStaticContentLoader реализацией StaticContentLoader. Он автоматически ищет следующие пакеты:

  • org.apache.struts2.static
  • шаблон
  • статические
  • org.apache.struts2.interceptor.debugging

Вы можете добавить дополнительные пакеты для поиска в параметре init фильтра с именем «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
3 голосов
/ 04 декабря 2013

Одним из способов является расширение всего шаблона и изменение шаблона template, как вы уже предлагали. Если вам не нужно реализовать собственный шаблон, это будет слишком сложным делом.

Но лучший способ 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>
...