尝试执行JSTL时的java.lang.IllegalArgumentException< c:如果>条件

时间:2015-08-13 06:25:06

标签: java jsp jstl

如果给定类别中的产品少于5个,我试图告诉我的程序在每个产品上打印一条消息。但是当我在浏览器中测试条件时,当我点击一个类别时(即使该类别有超过5个prods。),该页面变为空白,并且日志标记以下错误:

  

java.lang.IllegalArgumentException:无法转换{[entity.Product [id = 36],entity.Product [id = 37],entity.Product [id = 38],entity.Product [id = 39],entity类型为org.eclipse.persistence.indirection.IndirectList的.Product [id = 160]]}类java.lang.Long

我认为c:if条件存在问题。

    <c:set var="product" value="${categoryProducts}"/>

<c:if test="${categoryProducts > 5}">
                         <div id="pd_msg">SALE!</div>
                          </c:if>

2 个答案:

答案 0 :(得分:3)

试试这个:

    <c:set var="product" value="${categoryProducts}"/>

    <c:if test="${categoryProducts.size() > 5}">
        <div id="pd_msg">SALE!</div>
    </c:if>

Exception告诉您,您正在尝试将List(左侧)与Long(右侧)进行比较。 但是你只能比较相同类型的对象,这就是为什么你需要首先调用size(),这将给你 列表中的项目总数。

答案 1 :(得分:0)

@BadK建议的解决方案很好,但是如果它不适合你,就像它不适合我,下面的代码对我有用:

 <c:if test="${fn:length(categoryProducts) < 5}">
        <div id="pd_msg">SALE!</div>
    </c:if>

此解决方案可在此处找到:Evaluate if list is empty JSTL