Разница между Длиной [...] и fn: длина (...) в JSP EL - PullRequest
2 голосов
/ 09 ноября 2010

В чем разница между LENGTH[...] и функцией JSTL fn:length(...)?

Я попытался найти разницу, но я не увидел ни одного примера, использующего первый.

Вот пример:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 
    <td valign="top">
        .....print something
    </td>
</c:when>

1 Ответ

7 голосов
/ 09 ноября 2010

Поскольку в стандартной JSP / JSTL / EL такой функции, как LENGTH[...], нет, рассказать о различиях невозможно.fn:length() - единственный способ получить длину String, Object[] или Collection.

${fn:length(someCollection)}

Обновление согласно вашему (фиксированному) примеру:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 

Я никогда раньше такого не видел.Похоже, что ваш webapp / servletcontainer использует собственный распознаватель EL.Если это правда, вы должны увидеть, что это было объявлено в файле web.xml веб-приложения.

В любом случае, вы бы хотели использовать здесь ключевое слово EL empty.Он проверяет не только null, но и длину String, Object[] или Collection.

<c:when test="${not empty object.field}"> 

. Нет необходимости fn:length() здесь.


Обозначение скобки [], в свою очередь, часто используется для доступа к свойствам с помощью динамических клавиш.Например,

${bean[propertyname]}

Если propertyname разрешает "foo", то вышеприведенное делает то же самое, что и ${bean.foo}.Он также часто используется на Map объектах в области видимости.

...