Произвольные тэги (Custom tags)


Произвольные Тэги (Custom Tags) предоставляют вам всю мощь языка Java наряду с почти совершенной интеграцией в ваш уровень представления. [6]

Произвольные теги - это JSP теги самостоятельного производства. Для полного понимания смысла, вам необходимо, прежде всего, четко представлять себе, что такое тэги.

Есть шансы, что вы активно использовали теги и до прочтения этой главы. Очень мало разработчиков в наши дни работают в средах, которые полностью отделены от Internet, а это значит, что вы, вероятно, имеете как минимум основы знаний HTML или XML.

В языке разметки, таком как HTML или XML, структура встраивается в данные. Это позволяет синтаксическому анализатору, такому как браузер, интерпретировать инструкции для отображения или хранить информацию.

Основным механизмом для этого являются тэги.

Тэги - это очень просто, как для инструкции <b>, которая просто говорит читателю (в данном случае это web браузер), что необходимо применить некоторое форматирование к данным. Этот конкретный тэг предназначен для отображения данных (которые являются обычным текстом) жирным шрифтом. Каждый тэг должен иметь начальную и конечную точку, то есть в этом случае </b>, что позволяет синтаксическому анализатору языка разметки идентифицировать порцию содержимого путем определения того, какие данные лежат между начальным и конечным тегами. Это позволяет применить к этим данным некоторое структурирование или формат. В этом случаю любой текст между начальным и конечным тегами будет отображаться жирным шрифтом.

Другой важный механизм для применения этой структуры к данным - это атрибуты, которые делают тэги немного более сложными, такие как, например, тэг "table" в HTML. Тэг таблицы может иметь атрибут бордюра, то есть <table border="3">, это значение атрибута border, применяется к данным, которые появятся после тэга <table> и перед тэгом </table>. Эти данные, находящиеся между двумя тэгами, являются телом тэга. Все данные в теле этого тэга будут отображаться в таблице, а бордюр вокруг каждого элемента таблицы будет толщиной "3".

В случае тэга таблицы в HTML все более усложняется, поскольку тело тега может содержать другие тэги наряду с данными, позволяя вложение. Другими словами, вы можете определить строку в таблице и данные таблицы (или колонку) в строке. Это позволяет создать хорошее структурирование данных.

Пример:

<table border="3">
   <tr>
      <td>black</td>
      <td>white</td>
   </tr>
</table>

Здесь определена таблица с размером бордюра равным трем, одной строкой и двумя колонками, содержащая данные black и white. Слова black и white являются элементами данных, которые составляют тело тэга <td> или тэга данных таблицы (table data). Тэг <tr>, или тэг строка таблицы (table row), со своим встроенным тэгом <td> и данными составляет тело тега таблицы. Вы можете четко видеть, что взаимосвязь между этими тегами важна. Тэг строки таблицы <tr>, имеет мало смысла вне пределов тэга таблицы, аналогично, тэг данных таблицы <td> не имеет смысла вне пределов тега строки таблицы. Мы ссылаемся на тэг таблицы, как на родительский для тэга строки таблицы, а на тэг строки таблицы, как на родительский для тега данных таблицы.

XML вводит идею пространства имен, которое дает вам немного больше гибкости при именовании тэгов. (Более детально смотрите главу об XML.) Если вы хотите создать свой собственный язык разметки, аналогичный HTML, вы можете определить пространство имен, называемое mytags, и определить ваш собственный тэг в нем, таким образом получиться тэг <mytag:table> и </mytag:table>. Смысл прост: это должно значить, что в данном случае не будет путаницы между оригинальным HTML тэгом table и вашим собственным, заново определенным тэгом table. Ваш тэг table находится в собственном пространстве имен. Это значит, что вы можете использовать последовательную конвенцию имен, то есть вызов "table" предпочтительнее "myspecialtable", когда не нужно беспокоиться о коллизии с определением в HTML стандарте.

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