我正在使用 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>
我的问题是因为我configurationManager.reload()
在加载存储在各种插件中的一些额外的 Struts2 XML 配置文件后调用了 Struts 方法。调用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 的解决方案。