JSTL将变量设置为字符串的长度

时间:2015-04-08 18:38:07

标签: java xml jstl

我有一些代码,我试图用它来获取jstl中xml节点值的长度。

<x:forEach select="$person/tel"  var="phone">
        <x:if select="$phone/@type='office'">
            <c:set var="length" value=${fn:length("${phone}")}/>                            
            <c:out value="${length}"/>
        </x:if>
</x:forEach>

我在调用函数时遇到错误。

“org.apache.jasper.JasperException:/edit.jsp(第87行,第35列)引号符号”

我需要获取长度,因为长度决定了我如何解析它并将其写入页面。

我不确定是否有办法做到这一点,或者我是否正确接近这一点。

更新的代码:

<x:forEach select="$person/tel"  var="tel">
                        <x:if select="$tel/@type='office'">
                            <x:set var="number" select="$tel/phone"/>
                            <c:set var="length" value="${fn:length(number)}"/>                  
                            <c:out value="${length}"/>
                        </x:if>
</x:forEach>

2 个答案:

答案 0 :(得分:0)

问题是您无法在"${phone}"内使用fn:length()

正确的方法应该是:

 <c:set var="length" value=${fn:length(phone)}/>

答案 1 :(得分:0)

想出来了。问题是:

<x:set var="number" select="$tel/phone"/>

不设置字符串,而只是xml节点的表示。要将节点内容转换为字符串,我做了:

<c:set var="phonenumber">
    <x:out select="$number"/>
</c:set>

x:out将节点内容转换为字符串,并将其包装在c:set中设置变量。