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
相关产品推荐
相关产品推荐

