Помимо написания ваших собственных пользовательских тегов в JSP , вы обнаружите, что Java EE фактически предоставляет готовый для использования набор стандартной библиотеки тегов Java (JSTL). Эти встроенные теги включают в себя повторяющиеся (для цикла) теги, теги условия, объявление переменных, теги вывода и т. Д. Библиотеки также поставляются со многими служебными функциями и тегами форматирования международных сообщений. Вот пример, как это выглядит.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
<!DOCTYPE html><html> <body> <h1>JSTL Examples</h1> <h2>List of Application Context: ${applicationScope}</h2> <table> <c:forEach var="entry" items="${applicationScope}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Session Context: ${sessionScope}</h2> <table> <c:forEach var="entry" items="${sessionScope}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Page Context: ${pageScope}</h2> <table> <c:forEach var="entry" items="${pageScope}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Request Context: ${requestSope}</h2> <table> <c:forEach var="entry" items="${requestSope}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Query Parameters: ${param}</h2> <table> <c:forEach var="entry" items="${param}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Header Parameters: ${header}</h2> <table> <c:forEach var="entry" items="${header}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> <h2>List of Cookies: ${cookie}</h2> <table> <c:forEach var="entry" items="${cookie}"> <tr> <td>${entry.key}</td> <td> <c:out value="${entry.value}"/> </td> </tr> </c:forEach> </table> </body></html> |
Я использовал основной тег здесь для отображения записей карты нескольких неявных переменных. Вы можете узнать больше об этих объявлениях тегов, которые я определил в верхней части страницы примера из спецификации. Этот код взят из jsp-примера из GitHub.
ПРИМЕЧАНИЕ: при развертывании приведенного выше примера в GlassFish 3/4 вы столкнетесь с исключением NullPointerException, в результате чего страница выдаст ошибку. Оказывается, что сервер GF добавил внутреннюю переменную с именем com.sun.jsp.taglibraryCache в ServletContext (область приложения), которая выдает NPE при вызове его toString ()! Чтобы обойти это, я создал jstl-example2.jsp
это оборачивает $ {entry.value} в пользовательскую функцию JSTL, чтобы гарантировать возвращение вывода без исключения. Итак, извлеченный урок заключается в том, что вы всегда должны возвращать строку и не выбрасывать исключение при переопределении
toString () класса Java. Это просто плохая практика.
| Ссылка: | EE JSP: Генерация динамического контента с помощью библиотек тегов JSTL от нашего партнера JCG Земьяна Дена в блоге A Programmer’s Journal . |