代码之家  ›  专栏  ›  技术社区  ›  Doahh

配置.reload()后,Struts2不为静态资源提供服务

  •  1
  • Doahh  · 技术社区  · 11 年前

    我正在使用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>
    

    我的问题是因为我调用Struts configurationManager.reload() 方法,然后加载存储在各种插件中的一些额外的Struts2XML配置文件。使命感 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: 选项选择传输 标签的JavaScript由浏览器找到。

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   Roman C    11 年前

    这个 s:head 标签应该放在头标签下面。

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

    struts.serve.static=true
    

    如果您想从访问它 context_path/struts 然后将其设置为关闭 false .

    struts.serve.static=false