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

Tomcat部署JSP报core:choose下存在非法displaytag:column子标签问题咨询

报错根本原因

Tomcat的JSP解析器与JSTL实现严格遵循JSTL规范要求,<core:choose>标签的直接子节点仅允许为<core:when>和<core:otherwise>,不允许出现其他标签、文本节点甚至多余空白字符;而Weblogic的JSP容器对规范实现更宽松,兼容部分非严格合规的写法。
另外代码中EL表达式内嵌套JSP脚本的写法会干扰Tomcat的标签结构解析,导致解析器错误识别标签层级,误判<displaytag:column>为<core:choose>的直接子节点,触发验证错误。

解决方案

  • 修复EL表达式混写JSP脚本的问题
    将表达式中${... eq '<%=MyConstants.ADMIN_RULE_NUM%>'}的脚本嵌入写法替换为标准EL写法:
    首先在JSP顶部导入常量类:

    <%@ page import="com.xxx.MyConstants" %>
    

    再将EL表达式修改为(EL 3.0及以上版本支持直接访问类常量):

    ${!command.logInTest || (command.logInTest && detailsBean.childRuleTest eq MyConstants.ADMIN_RULE_NUM)}
    

    彻底消除脚本嵌入导致的解析错乱问题。

  • 清理JSTL依赖冲突
    检查项目WEB-INF/lib目录,删除多版本共存的JSTL相关jar包,统一使用同一份JSTL实现,避免不同版本实现的校验逻辑冲突。

  • 关闭Tomcat严格标签校验(可选)
    若业务需要保留原有写法,可在项目WEB-INF/web.xml中添加JSP配置关闭严格校验:

    <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
      <init-param>
        <param-name>strictTagLibraryValidation</param-name>
        <param-value>false</param-value>
      </init-param>
    </servlet>
    

    也可直接修改Tomcat全局conf/web.xml中的JspServlet配置,添加上述参数。

  • 清理标签间多余空白
    移除<core:choose>与<core:when>、<core:otherwise>之间的换行与多余空格,避免解析器将空白节点识别为非法子节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:03