我的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类中是否更好?
答案 0 :(得分:1)
如果
<c:when test="${item.key.equal('endDropdown')}">
是假的,然后没有结束div
也许你想把它移到</c:when>
或提供另一个when
标记,以表示上述内容为false