【问题标题】:Compare values of list in <c:if>比较 <c:if> 中列表的值
【发布时间】:2012-01-13 14:36:50
【问题描述】:

我需要遍历与数据库列相关的特定行列表,该列的类型为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&lt;c:set&gt;。有什么我遗漏的吗?

【问题讨论】:

  • 我有什么遗漏:包括列表中包含的对象的类的代码。

标签: jsp arraylist jstl


【解决方案1】:

您需要以小写字母开头的属性名称。 ${Section.LangList} 不起作用,它必须是 ${Sections.langList}

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

如果还是不行,另一个可能的原因是双方的数据类型不同,即使它们包含相同的值。例如。 String 的值是 "42"Integer 的值是 42。您需要确保数据类型相同。


与具体问题无关,您的命名约定很糟糕。 List&lt;Language&gt; 的每个项目肯定不是另一个 List,但可能是 Language 类。此外,不需要使用大括号符号来访问具有固定名称的属性。只需使用 ${bean.property} 符号即可。以下将使您的代码更符合命名约定和更自文档化:

<c:forEach var="language" items="${section.languages}">
    <c:if test="${language.lang == language.id}">
        ...
    </c:if> 
</c:forEach> 

我仍然想知道${language.lang} 在这种情况下如何有意义。

【讨论】:

    【解决方案2】:

    试试这样的:

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

    如果它不起作用,请向我们展示您在迭代列表中的类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2011-06-10
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      相关资源
      最近更新 更多