JSTL - 将错误字符串转换为Long

时间:2015-03-11 11:56:42

标签: java jsp casting jstl

我尝试使用JSTL与价值进行比较,但我碰到了这个错误。

  

评估自定义操作属性"值&#34时发生错误   有价值" $ {item.ruleValues.size}":"。"运营商提供   索引值为" java.lang.String"要应用于列表   或数组,但该值不能转换为整数。 (空)

这是具体的代码行 -

<c:set var="nElCol" value="0" scope="page"/>
<c:forEach var="elem" items="${item.ruleValues}" varStatus="status">
    <c:set var="size" value="${item.ruleValues.size}" scope="page" />
    <c:set var="nElCol" value="${nElCol + 1}" scope="page"/>

    <c:if test="${size == (nElCol-1)}">
        <TD align="center" width="110">
            <input id='<c:out value="${count}" />' type="text" name="fname" value='<c:out value="${elem}"/>'> 
        </TD>   
        <TD align="center" width="110">
            <img src="/XA-IME-PF/public/img/Plus.jpg" alt="add" width="10" height="10"/>
        </TD>
    </c:if> 
</c:forEach>

item对象就是这个:

public class BoElementToPrint implements Serializable{

    private List ruleValues; 

    /**
     * @return
     */
    public List getRuleValues() {
        return ruleValues;
    }

    /**
     * @param list
     */
    public void setRuleValues(List list) {
        ruleValues = list;
    }
}

ruleValues是一个字符串列表。

2 个答案:

答案 0 :(得分:2)

您必须使用JSTL函数taglib才能评估List的大小。 .运算符仅用于引用bean属性或哈希映射键。

因此,您必须先导入taglib:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

然后更改size定义:

<c:set var="size" value="${fn:length(item.ruleValues)}" scope="page" />

答案 1 :(得分:0)

在更新版本的EL中,我相信您可以简单地执行以下操作:

${item.ruleValues.size()} 

即append()否则EL解析器将寻找方法getSize();

见这里:

https://stackoverflow.com/tags/el/info

  

调用非getter方法

     

从EL 2.2开始,它作为Servlet 3.0 / JSP 2.2的一部分进行维护   (Tomcat 7,Glassfish 3,JBoss AS 6等),它可以调用   非必要的方法,必要时带参数。

     

e.g。

     使用

$ {bean.find(param.id)}      

public Something find(String id){       return someService.find(id); }将调用request.getParameter(“id”)作为参数的方法。