1

我正在使用 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 的解决方案。

4

1 回答 1

1

s:head标签应该放在head标签下。

默认情况下使用的常量FilterDispatcher从其 jar 内部提供静态内容。

struts.serve.static=true

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

struts.serve.static=false
于 2013-08-23T15:44:38.157 回答