воскресенье, 6 сентября 2015 г.

Использование JSTL в ADF (Using JSTL in ADF )

Добрый день. Часто, работая с jsf фрагментами и jspx страницами не хватает стандартной функциональности. JavaServer Pages Standard Tag Library (JSTL) представляет часть дополнительных функций:

JavaServer Pages Standard Tag Library (JSTL) — расширение спецификации JSP, добавляющее библиотеку JSP тегов для общих нужд, таких как разбор XML данных, условная обработка, создание циклов и поддержка интернационализации


Тэги JSTL делятся на 5 категорий:

   Основные тэги:
  • Общего назначения: <c:out>, <c:set>, <c:remove>, <c:catch>
  • Условия: <c:if>, <c:choose>, <c:when>, <c:otherwise>
  • Относящиеся к URL: <c:import>, <c:url>, <c:redirect>, <c:param>
  • Итерации: <c:forEach>, <c:forTokens>



 Тэги форматирования:
  • Интернационализация: <fmt:message>, <fmt:setLocale>, <fmt:bundle>, <fmt:setBundle>, <fmt:param>, <fmt:requestEncoding>
  • Форматирование: <fmt:timeZone>, <fmt:setTimeZone>, <fmt:formatNumber>, <fmt:parseNumber>, <fmt:parseDate>
«SQL» тэги:

Работа с БД: <sql:query>, <sql:update>, <sql:setDataSource>, <sql:param>, <sql:dateParam>

XML тэги:
  • Общие XML операции: <x:parse>, <x:out>, <x:set>
  • XML-контроль: <x:if>, <x:choose>, <x:when>, <x:otherwise>, <x:forEach>
  • Трансформации: <x:transform>, <x:param>
JSTL функции:

Работа со строками: <fn:contains>,<fn:containsIgnoreCase>,<fn:endsWith>,<fn:escapeXml>,<fn:indexOf>,<fn:join>,<fn:length>,<fn:replace>,<fn:split>,<fn:startWith>,<fn:substring>,<fn:substringAfter>,<fn:substringBefore>,<fn:toLowerCase>,<fn:toUpperCase>,<fn:trim>

Теперь подробней о каждом тэге:

Основные тэги.

Основные тэги подключаются при помощи строки в jsp:root:

<jsp:root
...
          xmlns:c="http://java.sun.com/jsp/jstl/core"
...
 >



Тэг Описание
<c:out > Вывод данных на экран.
Параметры:
value - значение, которое будет вычисляться и выводиться
escapeXml- название переменной для хранения числа
default - значение по умолчанию, если вычисляемое значение равно Null
Пример:
<c:out value='Данные' />
<c:set > Задает значение переменной .

value - значение, которое будет вычисляться
var - название переменной для хранения
scope - область видимости 
target - целевой объект, свойство которого будет установлено
property -  имя свойства, которое будет установлено
Пример:
<c:set var=”user” scope=”application” value=”Михаил” />
<c:remove > Удаление переменной из scope.
var - название удаляемой переменной
scope - область видимости
Пример : <c:remove var=”user” scope=”application” />
<c:catch> Вылавливает исключения в теле тэга.
var - название  переменной в которой хранится исключение
Пример :
<c:catch var=”exception”>
....
</c:catch>
<c:if test=”%{exception!= null}”>
There was an exception: %{exception.message}
</c:if>

<c:if> Тэг условия. Если условие в параметре test = true, то всё, что в теле тэга выполняется
test- проверяет условие, при выполнении которого обрабатывается тело тэга
var - название переменной в которой сохраняется результат условия
scope - область видимости  
<c:choose> Взаимоисключающий тэг условия
<c:when> Тэг используемый в <c:choose> для проверки условия :
test- проверяет условие, при выполнении которого обрабатывается тело тэга
Пример:
<c:when test=”${user=='Михаил'}”>
тело действия
</c:when>
<c:otherwise> Тэг используемый в <c:choose> при не выполнении ни одного <c:when>
<c:import> Импортирует необходимую страницу:
url - URL импортируемого ресурса
context -  имя контекста
var - название переменной в которой сохраняется результат условия
scope - область видимости
charEncoding  -  символьная кодировка контента при вводе ресурса
varReader -  имя переменной для контента ресурса
Пример: <c:import url=brest-santehstroy.by/index.html />
<c:forEach > Цикл. :

var - имя экспортируемой переменной
varStatus - имя экспортируемой переменной, в которой хранится статус итерации
items- коллекция элементов над которыми производятся итерации
begin -используется, если не определен параметр items и указывает с какого индекса начинается цикл
end- -используется, если не определен параметр items и указывает с каким индексом заканчивается цикл
step - цикл будет обрабатывать номера итераций кратные step
<c:forTokens> Цикл похож на ранее приведенный forEach: совпадают многие атрибуты тега. Но ключевое отличие в том, что цикл идет по списку лексем, на которые была разбита строка
Пример:
<c:forTokens items="Water,Fire,Wind" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
<c:param> Добавляет параметры запроса к URL.Является вложенным действием для c:importc:redirect и c:url
Пример:
<c:param name="user" value="Misha"/>
<c:redirect > Производит редирект на новый url
url - URL перенаправляемого ресурса
context -  имя контекста
Пример:
<c:redirect url="http://www.oracle-adf.info"/>
<c:url> Создает URL с соответствующими параметрами записи
value - URL  который будет обрабатываться
context -  имя контекста
var - название переменной для обработанного URL
scope - область видимости
Пример:
<c:url value=”http://www.oracle-adf.info” var=”inputURL” >

Тэги форматирования.

Тэги форматирования подключаются при помощи строки в jsp:root:

<jsp:root
...
          xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
...
 >

Теги форматирования JSTL используются для форматирования и отображения текста, даты, время, и чисел для многоязычных веб-сайтов. Я опишу тэги относящиеся только к форматированию

Тэг Описание
<fmt:formatNumber> Выводит отформатированное число

Параметры:
value - значение, которое будет форматироваться
type - тип NUMBER, CURRENCY, или PERCENT
pattern - паттерн
currencyCode - кода валюты (для type="currency")
currencySymbol - символ валюты (для type = "currency")
groupingUsed - групировка чисел (TRUE или FALSE)
maxIntegerDigits - максимальное количество цифр выводимых в целой части
minIntegerDigits - минимальное количество цифр выводимых в целой части
maxFractionDigits - максимальное количество цифр выводимых в дробной части
minFractionDigits - минимальное количество цифр выводимых в дробной части
var - название переменной для хранения числа
scope - область видимости

Пример:

<fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}" />
<fmt:parseNumber> Синтаксический разбор строки в число, валюту или проценты

value-значение, которое будет разбираться
type -тип NUMBER, CURRENCY, или PERCENT
parseLocale- Локаль
integerOnly – определят должна ли разбираться синтаксически только целая часть значения
pattern- паттерн
timeZone – часовой пояс(для даты)
var - название переменной для хранения числа
scope - область видимости
<fmt:formatDate> Служит для форматирования даты и времени

value-значение, которое будет форматироваться
type -выбирается тип DATE (дата), TIME (время), or BOTH (вместе)
parseLocale- Локаль
dateStyle- стиль форматирования для дат. Следует семантике класса java.text.DateFormat ( применяется когда type равен time или both)
timeStyle-стиль форматирования для времени. Следует семантике класса java.text.DateFormat ( применяется когда type равен time или both)
pattern- паттерн
timeZone – часовой пояс(для даты)
var - название переменной для хранения значения
scope - область видимости
<fmt:parseDate> Производит синтаксический анализ даты и времени

value-значение, которое будет форматироваться
type -выбирается тип DATE (дата), TIME (время), or BOTH (вместе)
parseLocale- Локаль
dateStyle- стиль форматирования для дат. Следует семантике класса java.text.DateFormat ( применяется когда type равен time или both)
timeStyle-стиль форматирования для времени. Следует семантике класса java.text.DateFormat ( применяется когда type равен time или both)pattern- паттерн
timeZone – часовой пояс(для даты)
var - название переменной для хранения значения
scope - область видимости

SQL тэги

SQL тэги подключаются при помощи строки в jsp:root:

<jsp:root
...
          xmlns:sql="http://java.sun.com/jsp/jstl/sql
...
 >

Тэг
Описание
<sql:setDataSource> Сохраняет информацию о данных источника в контекстными переменной, которая может быть использована в качестве параметра в других тэгах JSTL.
driver  - имя   класса JDBC драйвера
url - URL БД
user- имя пользователя БД
password - пароль  пользователя БД
dataSource -  источник данных связанный с БД
var - название переменной для хранения результата запроса
scope - область видимости
<sql:query> Выполняет запрос к БД. Запрос можно писать в теле тэга или в параметре sql.
dataSource-Источник данных связанный с БД
maxRows- максимальное количество строк, которые  будут включены в результат запроса
startRows- первая строка в результате запроса
var - название переменной для хранения результата запроса
scope - область видимости
<sql:update> Выполняет SQL инструкции INSERT, UPDATE, DELETE. Так же можно выполнить инструкции языка, которые ничего не возвращают

sql-инструкция SQL запроса
dataSource-Источник данных связанный с БД
var - название переменной для хранения результата запроса
scope - область видимости
<sql:param> Устанавливает параметры   в SQL инструкциях. Является вложенным действием для  <sql:query> и <sql:update>
value- значение параметра
<sql:dateParam> Устанавливает параметры   в SQL инструкциях имеющих тип java.util.Date
<sql:transaction > Устанавливает транзакционный контекст для вложенных действий
isolation-уровень  изоляции транзакции(READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, или SERIALIZABLE)
dataSource-Источник данных связанный с БД

XML тэги

XML тэги подключаются при помощи строки в jsp:root:

<jsp:root

...
          xmlns:x="http://java.sun.com/jsp/jstl/xml"

...

>


Тэги
Описание
<x:out> Вычисляет и выводит  XPath - выражение и выводит результат вычисления в текущий объект JspWriter
select - XPath - выражение которое будет обрабатываться
escapeXml - определяет должны ли быть символы : <,  > , &, ', " в результирующий строке конвертированы
<x:parse> Производит синтаксический разбор XML документа
xml - исходный документ
systemId- URI XML документа
filter- фильтр который будет применяться для разбора XML документа
var - название хранимой переменной для разбираемого документа
scope - область видимости
varDom - название хранимой переменной для разобранного документа
scopeDom - область видимости varDom
<x:set > Вычисляет и сохраняет XPath - выражение
select - XPath - выражение которое будет обрабатываться
var - название хранимой переменной
scope - область видимости
<x:if > Тэг условия для XPath выражений
select - условие проверки
var - название хранимой переменной в которой будет храниться результат условия
scope - область видимости
<x:forEach>  Цикл
var -  имя экспортируемой переменной
select - XPath - выражение над которым будут проходить вычисления
<x:choose> Взаимоисключающий тэг условия
<x:when > Тэг используемый в <x:choose> для проверки условия
<x:otherwise> Тэг используемый в <x:choose> при не выполнении ни одного <x:when>
<x:transform> Применяет XSLT- трансформацию  к  XML - документу
xml - исходный текст xml-документа который будет трансформирован
xslt - трансформированная таблица в качестве объекта String, Reader или Source
xmlSystemId- URI XML документа
xsltSystemId- URI XSLT документа
var - название хранимой переменной XML документа
scope - область видимости
result - Объект, который сохраняет или обрабатывает результат трансформации
<x:param > Устанавливает параметры трансформации. Вложенный тэг для  <x:transform>
name - имя параметра трансформации
value - значение параметра

JSTL функции

<jsp:root
...
           xmlns:fn="http://java.sun.com/jsp/jstl/functions"
...
>


Функция
Описание
fn:contains(string, string ) Возвращает логическое значение, показывающее, содержится ли второй параметр в первом.
fn:containsIgnoreCase(string,string) Не зависящая от регистра версия функции fn:contains()
fn:endsWith(string, string) Возвращает логическое значение, показывающее, заканчивается ли первый параметр строкой, содержащейся во втором параметре.
fn:escapeXml(string) Возвращает в параметре строку со всеми XML-символами, взятыми в коде сущности соответствующего ей XML-символа.
fn:indexOf(string, string) Возвращает целое число с указанием индекса начала второго параметра в первом параметре. Возвращает -1, если второй параметр не является подстрокой первого параметра
fn:length(object) Возвращает длину массива, размер коллекции или длину строки - в зависимости от типа параметра.
fn:replace(string, string, string) Возвращает строку, заменяя каждый экземпляр второго параметра в первом параметре третьим параметром.
fn:startsWith(string, string) Возвращает логическое значение, показывающее, начинается ли первый параметр с содержимого второго параметра.
fn:substring(string, int, int) Возвращает строку, содержащую подстроку первого параметра, начиная с индекса, указанного вторым параметром, и заканчивая непосредственно перед индексом, указанным третьим параметром.
fn:substringAfter(string,string) Возвращает строку, содержащую подстроку первого параметра, начиная с места первого вхождения второго параметра и до конца первого параметра.
fn:substringBefore(string, string) Возвращает строку, содержащую подстроку первого параметра, начиная с начала первого параметра и заканчивая непосредственно перед первым появлением второго параметра.
fn:toLowerCase(string) Возвращает строку в нижнем регистре
fn:toUpperCase(string) Возвращает строку в верхнем регистре
fn:trim(string) Возвращает строку с удалёнными пробелами в начали и конце строки
fn:split(string, string) Возвращает массив строк, содержащий элементы первого параметра, разделенные вторым параметром.
fn:join(string[], string) Возвращает строку, состоящую из элементов первого параметра, разделенных элементами второго параметра, используемыми в качестве разделителя.

Пример использования jstl функций в jspx странице :

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:c="http://java.sun.com/jsp/jstl/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
          xmlns:fn="http://java.sun.com/jsp/jstl/functions"
          xmlns:fmt="http://java.sun.com/jsp/jstl/fmt">
  <jsp:directive.page contentType="text/html;charset=UTF-8"/>
  <f:view>
    <af:document id="d1">
      <af:form id="f1" usesUpload="true">
          <c:set var="user" value="Misha"/>
          <c:set var="summ" value="12345"/>
          <c:out value="${user} "/>
          <fmt:formatNumber type="number" maxIntegerDigits="3" value="${summ}"/>
          <af:outputText value=" Длинна  слова 'Инкапсуляция'= #{fn:length('Инкапсуляция')}" id="aot1"/> 
      </af:form>
    </af:document>
  </f:view>
</jsp:root>

Исходники приложения находятся на github: https://github.com/JealousyM/jstl-adf

Подробнее о JSTL можно прочитать по следующей ссылке:

http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm