比较<c:if> </c:if>中列表的值

时间:2012-01-13 14:36:50

标签: jsp arraylist jstl

我需要遍历属于数据库列的特定行列表,类型为Integer。数据库中的此列是同一表中父列ID的外键。

如果匹配,我必须匹配这两个值并在JSP中打印。

我已经浏览了这个链接Evaluate list.contains string in JSTL,并一直试图让它运作起来。我不知道到底哪里出错了。

这是我到目前为止所做的:

<c:forEach var="List" items="${Section.LangList}">
    <c:if test="${List['Lang'] == List['Id']}">
        ...
    </c:if> 
</c:forEach>    

这是我用来比较这些值的其中一件事。我也试过了contains<c:set>。有什么东西我不见了吗?

2 个答案:

答案 0 :(得分:2)

您需要使用小写启动属性名称。 ${Section.LangList}无法正常工作,必须是${Sections.langList}

<c:forEach var="List" items="${Section.langList}">
    <c:if test="${List['Lang'] == List['Id']}">
        ...
    </c:if> 
</c:forEach> 

如果仍然不起作用,另一个可能的原因是双方的数据类型不同,即使它们包含相同的值。例如。 String的{​​{1}}值与"42"的{​​{1}}值相关联。您需要确保数据类型相同。


对具体问题

无关,你的命名惯例很糟糕。 Integer的每个项目肯定不是另一个42,但可能是List<Language>类。此外,使用括号表示法来访问具有固定名称的属性是不必要的。只需使用List表示法。以下内容将使您的代码更符合命名约定和更多自我记录:

Language

我仍然想知道${bean.property}在这种背景下是如何理解的。

答案 1 :(得分:0)

尝试这样的事情:

<c:forEach var="item" items="${Section.LangList}">                   
    <c:if test="${item.lang eq item.id}">
        .....
    </c:if>
</c:forEach>    

如果它不起作用告诉我们你在迭代列表上的类