Java 为什么这段代码会生成错误“the end tag”

Java 为什么这段代码会生成错误“the end tag”,java,jsp,spring-mvc,jstl,Java,Jsp,Spring Mvc,Jstl,我不明白为什么会出现错误: The end tag "</c:when" is unbalanced 运行此代码时: <c:choose> <c:when test="${label == 'Apple'}"> <form:form modelAttribute="fruit" action="/fruit/${fruitId}" method="post"> <form:

我不明白为什么会出现错误:

The end tag "</c:when" is unbalanced
运行此代码时:

<c:choose>
    <c:when test="${label == 'Apple'}">
        <form:form modelAttribute="fruit" action="/fruit/${fruitId}" method="post">                 
        <form:input path="fruitId" type="hidden" value="${fruitId}"/>
    </c:when>
    <c:when test="${label == 'Orange'}">
        <form:form modelAttribute="fruit" action="/fruit/${fruitId}" method="post">
        <form:input path="fruitId" type="hidden" value="${fruitId}"/>
    </c:when>               
</c:choose>

您有一个未关闭的标记。

在我的例子中,我发现问题在于使用html注释语法注释掉JSTL代码。因此,请重新检查包含JSTL语法的html文件,以检查您是否犯了相同的错误。请参考以下示例:

将上面的注释更改为下面的注释

<%-- <security:authorize access="hasAnyRole('ASSOC_COMPANY','PUBLIC_COMPANY', 'INDIVIDUAL')"> --%>

对我来说,我忘了关闭JSTL标记

这是我该修的地方

<c:set var="attendance" value="${hallManager.selectAttandanceRegisterByAttID()}" >
我换了这个之后就没事了

<c:set var="attendance" value="${hallManager.selectAttandanceRegisterByAttID()}" />

快速解决此问题的一些技巧: 如果您有像Netbeans这样的IDE,请尝试 1.折叠所有标记并逐个展开以查看未关闭的标记。
2.键入并查看弹出菜单(如果已启用)。如果有任何未关闭的标记,它将显示。

但是我不能关闭表单标记,直到稍后在JSP中。我需要这张支票。没有办法把这个放在这里吗?那就早点打开表格。如果您真的需要拆分表单,您可以根据需要使用JavaScript将值从一个填充到另一个。@Brian为什么需要在那里进行检查?两条路径都是相同的。在任何情况下,都不能像XML或HTML那样随意地交织标记。
<c:set var="attendance" value="${hallManager.selectAttandanceRegisterByAttID()}" />
<c:set var="attendance" value="${hallManager.selectAttandanceRegisterByAttID()}" ></c:set>