У меня есть код, который я пытаюсь использовать для получения длины значения узла xml в jstl.
<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>
Выяснил это. Проблема в том, что:
<x:set var="number" select="$tel/phone"/>
не устанавливает строку, а просто представляет собой узел xml. Чтобы преобразовать содержимое узла в строку, я сделал:
<c:set var="phonenumber">
<x:out select="$number"/>
</c:set>
x: out преобразует содержимое узла в строку и обертывает его в c: set задает переменную.
Проблема в том, что вы не можете использовать "${phone}"
внутри fn:length()
.
Правильный способ:
<c:set var="length" value=${fn:length(phone)}/>
<x:set var="number" select="$tel/phone"/>
проверить, является ли она строкой и задана ли она правильно (не пусто).