不匹配的结束标记

时间:2018-05-31 07:18:52

标签: jsf xhtml jstl

我的xhtml页面中有以下代码:

<c:forEach var="item" items="${menu}">
  <c:choose>
    <c:when test="${fn:startsWith(item.key, 'startDropdown.')}">
      <c:set var="dropdown" scope ="session" value="true" />
      <c:set var="dropdownnaam" scope ="session" value="${fn:substringAfter(item.key, 'startDropdown.')}" />
            <li class="nav-item dropdown"><a id="${dropdownnaam}" href="#" role="button" class="nav-link dropdown-toggle" data-toggle="dropdown">#{i18nTeksten.tekst(item.value)}<b class="caret"></b></a>
              <div class="dropdown-menu dropdown-menu-center" aria-labelledby="${dropdownnaam}">
    </c:when>
    <c:when test="${item.key.equals('endDropdown')}">
      <c:set var="dropdown" scope ="session" value="false"/>
              </div>
            </li>
    </c:when>
    <c:when test="${dropdown.equals('true')}">
                <a class="dropdown-item" href="#{item.key}">#{i18nTeksten.tekst(item.value)}</a>
    </c:when>
    <c:otherwise>
            <li class="nav-item"><a class="nav-link" href="#{item.key}">#{i18nTeksten.tekst(item.value)}</a></li>
    </c:otherwise>
  </c:choose>
</c:forEach>

使用它时出现以下错误:

  

跟踪错误[第29行]元素类型&#34; div&#34;必须由匹配的结束标记终止&#34;&#34;。

当我删除以下行(8-10)时

</c:when>
<c:when test="${item.key.equal('endDropdown')}">
  <c:set var="dropdown" scope ="session" value="false"/>

然后一切正常(我还没有使用&#39;下拉功能)。我想这与解析xhtml的方式有关。

是否有(简单/标准)方法来解决/绕过此问题,或者将此逻辑放在服务器上的Java类中是否更好?

1 个答案:

答案 0 :(得分:1)

如果

<c:when test="${item.key.equal('endDropdown')}">

是假的,然后没有结束div

也许你想把它移到</c:when>

之后

或提供另一个when标记,以表示上述内容为false