Тэги функций fn в библиотеке JSTL

Последняя статья из цикла про библиотеку JSTL (Jakarta Standard Tag Library или ранее JavaServer Pages Standard Tag Library). Уже написал о core-тэгах и форматировании, теперь пришло время функций fn.

Чтобы начать пользоваться этой библиотекой, в файл pom.xml нужно добавить зависимость.

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

И на страницах jsp подключаем библиотеку следующим образом:

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

Это позволит нам использовать теги функций, и все они будут начинаться с указанного префикса fn. Доступны следующие функции:

boolean contains(String, String)  boolean containsIgnoreCase(String, String) 
boolean endsWith(String, String) String escapeXml(String, String) 
int indexOf(String, String) String join(String[], String) 
int length(Object) String replace(String, String, String) 
String[] split(String, String) boolean startsWith(String, String) 
String substring(String, int, int) String substringAfter(String, String) 
String substringBefore(String, String) String toLowerCase(String) 
String toUpperCase(String) String trim(String) 

В принципе, все функции и так легко понять, но давайте посмотрим на каждую из них:

fn:contains

Эта функция проверяет, содержит ли строка (первый аргумент) подстроку (второй аргумент) и возвращает булево значение.

${fn:contains('JavaScript','Java')}

fn:containsIgnoreCase

Эта функция проверяет, содержит ли строка (первый аргумент) подстроку (второй аргумент) и возвращает булево значение, но при проверке игнорирует регистр.

${fn:contains('JavaScript','java')}

fn:endsWith

Эта функция проверяет, заканчивается ли строка (первый аргумент) подстрокой (второй аргумент) и возвращает булево значение

${fn:endsWith('JavaScript','Script')}

fn:escapeXml

Эта функция помогает экранировать теги в строке, которые могут интерпретироваться, как xml-код.

<c:set var="str" value="<b>My String</b>"/>
Без escapeXml : ${str}
С escapeXml : ${fn:escapeXml(str)}

В первом случае вывод будет выделен жирным, во втором случае теги вся строка выведется как положено.

fn:indexOf

Эта функция возвращает индекс первого вхождения подстроки (второй аргумент) в строку (первый аргумент) или -1, если подстрока не найдена.

${fn:indexOf('Let's go','go')} 

fn:split и fn:join

fn:split превращает строку (первый аргумент) в массив строк, разделяя её по сепаратору (второй аргумент).

А fn:join, наоборот, совмещает массив строк (первый аргумент) в строку, добавляя между ними сепаратор (второй аргумент)

<c:set var="str" value="address-of-my-page"/>
Строка : ${str} <br>
<c:set var="strSplit" value="${fn:split(str,'-')}"/>
<c:set var="strJoin" value="${fn:join(strSplit,' ')}"/>
Строка с пробелами : ${strJoin} 

На выводе получаем:

Строка : address-of-my-page
Строка с пробелами : address of my page

fn:length

Эта функция возвращает длину строки или размер коллекции.

${fn:length('my string')} 

fn:replace

Эта функция замещает в исходной строке (первый аргумент) подстроку (второй аргумент) на новую подстроку (третий аргумент).

${fn:replace('I don't give a fucking fuck!','uck','xxx')} 

На выводе получим:

I don't give a fxxxing fxxx!

fn:startsWith

Эта функция проверяет, начинается ли строка (первый аргумент) с подстроки (второй аргумент) и возвращает булево значение.

${fn:startsWith('Hello World!','Goodbye')}

fn:substring

Эта функция возвращает подстроку от исходной строки (первый аргумент), от заданного индекса (второй аргумент) включительно до другого заданного индекса (третий аргумент) не включительно.

${fn:substring('www.mysite.ru',4,10)} 

То есть берётся 10-4=6 символов, начиная с четвёртого. Не забываем, что нумерация символов начинается с нуля.

fn:substringAfter и fn:substringBefore

Эти функции возвращают подстроку от исходной строки (первый аргумент) после и до, соответственно, от найденной подстроки (второй аргумент). Если подстрока в строке не содержится, то вернётся пустая строка.

Подстрока до: ${fn:substringBefore('Cut this string',"this")} <br>
Подстрока после: ${fn:substringAfter('Cut this string',"this")} <br>
Подстрока не найдена: ${fn:substringAfter('Cut this string',"that")} <br>

На выводе получаем:

Подстрока до: Cut 
Подстрока после:  string
Подстрока не найдена: 

fn:toLowerCase и fn:toUpperCase

Эти функции меняют регистр всех символов строки (единственный аргумент) на нижний и верхний, соответственно.

${fn:toLowerCase('ШёПоТ...')} 
${fn:toUpperCase('кРиК!!!')} 

fn:trim

Эта функция удаляет пробелы с обоих концов строки (единственный аргумент).

${fn:trim('      TOO MANY SPACES         ')}

На этом всё. Пожалуй, самая простой из всех разделов jstl, потому что все функции довольно стандартные при работе со строками и имеют аналоги в большинстве языков программирования.

1 Comment

Оставить комментарий