配置后,Struts2没有提供静态资源.reload()

时间:2013-08-23 11:50:17

标签: java jsp configuration struts2 static-content

我正在使用Struts 2.3.15并且s:optionselecttransfer标记无效,因为JavaScript无法加载。我用:

<%@ taglib prefix="s" uri="/struts-tags" %>
<s:optiontransferselect ... />

生成以下JavaScript:

<script type="text/javascript" src="/struts/optiontransferselect.js"></script>

我的问题是由于我在加载一些存储在各种插件中的其他Struts2 XML配置文件后调用Struts configurationManager.reload()方法引起的。调用reload()会杀死Struts提供的静态资源。我的重新加载完成如下:

ConfigurationManager configurationManager = dispatcher.getConfigurationManager();
StrutsXmlConfigurationProvider strutsXmlConfigurationProvider = 
        new StrutsXmlConfigurationProvider(strutsXMLLocation, false, getServletContext());
configurationManager.addContainerProvider(strutsXmlConfigurationProvider);
configurationManager.reload();

要解决此问题,我已将文件从org.apache.struts2.static复制到我的服务器根目录,以便可以访问它们,然后使用Roman C的代码来防止Struts提供静态资源。这允许浏览器找到s:optionselecttransfer标记的JavaScript。

如果有人可能会猜到为什么reload()阻止提供静态资源我想尝试修复它。如果没有其他想法,那么我将接受Roman C的解决方案。

1 个答案:

答案 0 :(得分:1)

s:head标记应放在head标记下。

FilterDispatcher默认使用的常量从其jar中提供静态内容。

struts.serve.static=true

如果您想从context_path/struts访问它,请通过设置为false将其关闭。

struts.serve.static=false