我正在使用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的解决方案。
答案 0 :(得分:1)
s:head
标记应放在head标记下。
FilterDispatcher
默认使用的常量从其jar中提供静态内容。
struts.serve.static=true
如果您想从context_path/struts
访问它,请通过设置为false
将其关闭。
struts.serve.static=false