2010-10-28 23 views
12

quiero poner algunos archivos JavaScript en uno de mis paquetes y hacer puntales que sirvan como /struts/js/foo.jsservir archivos estáticos (JavaScript) con Struts 2

puntales hace que los archivos en el paquete de 'plantilla' (que es donde jQuery plugin los archivos se encuentran protegidos por la opción struts.ui.templateDir). Sin embargo, quiero poner esos archivos en otro paquete; Si redefino struts.ui.templateDir, struts deja de funcionar porque no puede encontrar sus plantillas.

Así que la pregunta es: ¿Cómo decirle a Struts que entregue archivos en org.foo.some.package.js como /struts/js/whatever.js?

+2

Ha visto esto enlace: http://struts.apache.org/development/2.x /docs/static-content.html? –

+0

@ AleksandrM bien, no lo sabía. Eres un buen candidato para la recompensa si te importa escribir una respuesta completa. – alamar

+2

¿por qué no usar algún servidor web para esto? diga Apache o nigix, que es una forma mucho mejor y más eficiente de servir contenido estático –

Respuesta

7

Struts2 puede servir contenido estático fuera de la caja. Por defecto, el contenido estático está siendo servido por DefaultStaticContentLoader una implementación de StaticContentLoader. Se busca automáticamente los siguientes paquetes:

  • org.apache.struts2.static
  • plantilla
  • estática
  • org.apache.struts2.interceptor.debugging

Puede agregar adicional paquetes que deben buscarse en el parámetro init de filtro denominado "paquetes".

<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> 

Puede agregar más de un paquete, use una coma o espacio o tabulación o una nueva línea como separador.

Por cierto se puede controlar si el contenido estático está siendo almacenado en caché por un navegador o no con esta constante:

struts.serve.static.browserCache 
+0

Respuesta canónica, +1 –

+0

¿Cómo lograron tener paquetes llamados estáticos? Es una palabra reservada: -/ – alamar

+0

@alamar: Bueno, es para recursos estáticos después de todo. Entonces no hay archivos fuente en él. –

3

Una forma es ampliar toda la plantilla & cambiar la plantillaDir como ya ha sugerido. A menos que uno necesite implementar una plantilla personalizada, esto es altamente exagerado.

Pero la mejor manera en mi humilde opinión es olvidar /struts/js/foo.js & utilizar cualquier otra URL para cargar el js.

pocas muestras:

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> 
+0

Bueno, ¿hay alguna manera fácil de hacer que Struts sirva mi js en cualquier otra url? – alamar

+0

@alamar He editado mi respuesta para agregar código de muestra. –

Cuestiones relacionadas