【问题标题】:JSTL set a variable to the length of a stringJSTL 将变量设置为字符串的长度
【发布时间】:2015-06-13 21:22:20
【问题描述】:

我有一些代码试图用来获取 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 (line: 87, column: 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>

【问题讨论】:

  • 你为什么使用标签javascript?我认为您的意思是 Java。
  • 我做到了。我修好了它。谢谢。
  • 好吧,你没有引用 value 属性的值。

标签: java xml jstl


【解决方案1】:

问题是您不能在fn:length() 中使用"${phone}"

正确的做法应该是:

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

【讨论】:

  • 将 xml 变量传递给长度函数是否有效?我已经用我的新代码更新了我的问题。现在,打印出来的输出只是长度为 1。我知道节点存在并且所有“if”语句都是有效的。
  • &lt;x:set var="number" select="$tel/phone"/&gt; 检查它是否是一个字符串并且设置正确(不是空的)。
  • 我可以用 将“数字”打印到屏幕上,但不能用 这让我认为这两个不混合得很好。
【解决方案2】:

想通了。问题是:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多