Подтвердить что ты не робот

Подавать статические файлы (JavaScript) с помощью Struts 2

Я хочу поместить некоторые файлы 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?

4b9b3361

Ответ 1

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

Ответ 2

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

Но лучший способ ИМХО - забыть /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>