You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tiles布局时JS文件无法加载的问题排查

Tiles配置未生效导致弹窗页面未加载公共资源的排查方案

核心排查方向:确认弹窗模板是否正确引用header属性

最常见的原因是popupTemplate.jsp未正确调用Tiles的header属性,导致header.jsp根本没有被渲染到页面中:

  1. 打开/WEB-INF/views/template/popupTemplate.jsp,检查是否包含Tiles标签库声明:
    <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
    
  2. 确认模板中是否在合适位置(比如<head>标签内)插入header属性:
    <head>
        <tiles:insertAttribute name="header" />
        <!-- 其他弹窗专属资源 -->
    </head>
    

如果缺少以上任意一步,header.jsp的内容不会被注入到弹窗页面,自然不会发起资源请求。

检查Tiles定义的匹配优先级

你的tiles.xml中同时存在三级路径通配符定义*/*/*和弹窗页面的精确路径定义svManager/registPj/svProjectList:

  • Tiles的规则是精确匹配优先于通配符匹配,但如果精确定义写在通配符定义之后,部分版本可能出现匹配异常。
  • 建议将弹窗的精确定义移到*/*/*通配符定义的前面,确保优先匹配:
    <!-- 先放精确匹配的弹窗定义 -->
    <definition name="svManager/registPj/svProjectList" extends="popBase">
        <put-attribute name="body" value="/WEB-INF/views/svManager/registPj/svProjectList.jsp" />
    </definition>
    
    <!-- 再放通配符定义 -->
    <definition name="*/*/*" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" />
    </definition>
    

验证控制器返回的视图名称

确认Spring MVC控制器返回的视图名称是否为svManager/registPj/svProjectList:

  • 如果控制器返回的是其他名称(比如带后缀或前缀的别名),则不会匹配到对应的popBase模板,可能会使用base模板或其他不包含header的模板。

排查弹窗的加载方式

如果弹窗是通过AJAX动态加载JSP片段(而非直接跳转页面):

  • 这种场景下Tiles的模板组装逻辑不会触发,AJAX只会请求body部分的JSP内容,不会加载模板中的header。
  • 解决方案:要么在父页面提前加载弹窗所需的JS/CSS,要么在弹窗的JSP片段中单独引入资源。

内容的提问来源于stack exchange,提问作者Seonwoo Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:18:09