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

Spring Boot集成Apache Tiles时如何在其中使用脚本元素

报错根因

你遇到的脚本元素禁用报错和全局JSP的scripting-invalid配置无关,是Apache Tiles的insertTemplate标签内部默认禁止解析脚本元素,Tiles有独立的脚本校验规则,优先级高于全局JSP配置。

可行解决方案
  • 方案一:将脚本内容提前到Tiles标签外处理,通过属性传入模板
    先在标签外定义变量,再通过putAttribute传递给模板使用:

    <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
    <% java.util.Date currentDate = new java.util.Date(); %>
    <tiles:insertTemplate template="/default.jsp" flush="true">
        <tiles:putAttribute name="content" value="<%= currentDate %>" />
    </tiles:insertTemplate>
    

    之后在/default.jsp中通过<tiles:getAsString name="content"/>即可取出参数渲染。

  • 方案二:直接开启Tiles的脚本支持权限
    在项目的web.xml中新增Tiles全局配置参数,允许Tiles标签内部解析脚本元素:

    <context-param>
        <param-name>org.apache.tiles.ALLOW_SCRIPTING</param-name>
        <param-value>true</param-value>
    </context-param>
    

    如果你是Spring Boot无web.xml配置,可以在启动类中通过设置Servlet上下文参数实现:

    @SpringBootApplication
    public class YourApplication implements ServletContextInitializer {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setInitParameter("org.apache.tiles.ALLOW_SCRIPTING", "true");
        }
    }
    
  • 方案三:替换scriptlet为JSTL/EL表达式(更推荐的规范写法)
    避免在视图层写Java脚本,改用JSP标准标签实现相同需求,不会触发脚本校验:

    <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
    <tiles:insertTemplate template="/default.jsp" flush="true">
        <jsp:useBean id="now" class="java.util.Date" />
        ${now}
    </tiles:insertTemplate>
    

内容的提问来源于stack exchange,提问作者k2-kubo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:09