문제

I want to put some JavaScript files in one of my packages and make Struts serve them like /struts/js/foo.js

Struts does that for files in 'template' package (that's where jQuery plugin's files are located, guarded by struts.ui.templateDir option). However I want to put those files into another package; If I redefine struts.ui.templateDir then struts ceases working because it can't find its templates.

So the question is: How to tell Struts to serve files in org.foo.some.package.js as /struts/js/whatever.js?

도움이 되었습니까?

해결책

Struts2 can serve static content out of the box. By default static content is being served by DefaultStaticContentLoader an implementation of StaticContentLoader. It automatically searches the following packages:

  • org.apache.struts2.static
  • template
  • static
  • org.apache.struts2.interceptor.debugging

You can add additional packages to be searched in filter init parameter named "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>

You can add more than one package, use comma or space or tab or new line as separator.

BTW you can control whether static content is being cached by a browser or not with this constant:

struts.serve.static.browserCache

다른 팁

One way is to extend the entire template & change the templateDir as you already suggested. Unless one needs to implement a custom template, this is highly over-kill.

But the best way IMHO is to forget /struts/js/foo.js & use any other URL to load the js.

Few Samples :

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