如何使用jstl比较2个值

时间:2014-05-30 05:07:55

标签: spring jsp jstl

我在控制器中有列表

List l=serviceClientServiceImpl.getSavedParents(clientId); 
uiModel.addAttribute("savedParents",l);
List<Parent> parentList = 
(List<Parent>) serviceClientServiceImpl.getParents("Parent",Long.valueOf(clientId)); 
uiModel.addAttribute("parentList", parentList);

我正在jsp中检索它,如下面的

<ul style="max-width: 300px;" class="nav nav-pills nav-stacked" id="menuId"> 
<c:forEach items="${parentList}" var="test"> 

<li ><a href="#" value="${test.id}-${test.category}" id="${parent.id}" onclick="return getQuestions(this);" > 
<input type="checkbox" value="${test.id}">${test.name }</a></li> 


</c:forEach> 
</ul> 
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 

<c:forEach items="${savedParents}" var="test1"> 
<ul style="max-width: 300px;" class="nav nav-pills nav-stacked"> 
<li class="active"><a href="#" value="${test1.id}" onclick="return getQuestions(this);"> 
<input type="checkbox" value="${test1.id}"></a></li> 

</ul> 
</c:forEach>

现在我想合并两者和test.id等于test1.id然后我想添加一个html class="active"

我尝试了以下方式

<ul style="max-width: 300px;" class="nav nav-pills nav-stacked"  id="menuId">
<c:forEach items="${parentList}" var="test">
<c:forEach items="${savedParents}" var="test1">
<c:when test3="${test.id}==${test1.id }">
  <li ><a href="#" class="active" value="${test.id}-${test.category}" id="${parent.id}" onclick="return getQuestions(this);" >
  <input type="checkbox" value="${test.id}">${test.name }</a></li>

</c:when>
<c:otherwise>
  <li ><a href="#" value="${test.id}-${test.category}" id="${parent.id}" onclick="return getQuestions(this);" >
  <input type="checkbox" value="${test.id}">${test.name }</a></li>
</c:otherwise>

</c:forEach>

  <%-- <li ><a href="#" value="${test.id}-${test.category}" id="${parent.id}" onclick="return getQuestions(this);" >
  <input type="checkbox" value="${test.id}">${test.name }</a></li> --%>


</c:forEach>
 </ul>
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

但我在eclipse中遇到错误

Multiple annotations found at this line:
    - Missing required attribute 
     "test"
    - Undefined attribute name 
     "test3"
    - Missing required attribute 
     "test"
    - Undefined attribute name 
     "test3"

任何人都能帮助我吗?

2 个答案:

答案 0 :(得分:3)

尝试以这种方式比较字符串

<c:when test="${test.id == test1.id }">

您也可以使用eq代替==

<c:when test="${test.id eq test1.id }">

答案 1 :(得分:1)

应该是<c:when test=而不是<c:when test3=

尝试使用c:if

<c:set var="id1" value="2" />
<c:set var="id" value="2" />

<c:if test="${id == id1 }">
    Equal
</c:if>

OR

<c:set var="id1" value="2" />
<c:set var="id" value="2" />

<c:choose>
    <c:when test="${id == id1 }">
        Equal
    </c:when>
    <c:otherwise>
        Not equal
    </c:otherwise>
</c:choose>

了解更多JSTL Core conditional Tag

注意:

  • 完整的条件表达式必须包含在单${}
  • c:when标记应该包含在c:choose标记
  

<c:choose>的工作方式类似于Java switch语句,因为它允许您在多种备选方案之间进行选择。如果switch语句包含case语句,则<c:choose>标记具有<c:when>个标记。一个switch语句有default子句来指定默认操作,类似的方式<c:choose><c:otherwise>作为默认子句。