logo
Хабибуллин

Обработка взаимодействующих тегов

Часто пользовательские теги, расположенные на одной странице JSP, должны взаимодействовать друг с другом. Например, тело тега может содержать другие, вложенные, теги JSP. Они могут быть самостоятельными по отношению к внешнему тегу или зависеть от него. Так, например, в языке HTML тег <tr> может появиться только внутри тега <table>. При этом атрибуты тега <table> могут использоваться в теге <tr>, а также могут быть переопределены внутри него. Таких примеров много в языке XML.

В языке JSP тоже могут появиться теги, зависящие друг от друга. Например, мы можем определить тег

<sdo:connection source="источник данных" >

устанавливающий соединение с базой данных, указанной в атрибуте source. Внутри этого тега допустимо обращение к базе данных, например:

<sdo:connection source="SDO" > <sdo:query >

SELECT * FROM students </sdo:query> <sdo:insert>

INSERT INTO students (name) VALUES ('Иванов')

</sdo:insert>

</sdo:connection>

Конечно, вложенные теги можно реализовать вложенными классами-обработчиками или расширениями внешних классов. Но в классах-обработчиках пользовательских тегов есть свои средства. Внешний и вложенный теги реализуются отдельными классами, расширяющими классы TagSupport или BodyTagSupport. Описания тегов в TLD-файле тоже не вложены, они записываются независимо друг от друга, например:

<tag>

<name>connection</name> <tag-class>sdotags.ConnectionTag</tag-class>

</tag>

<tag>

<name>query</name> <tag-class>sdotags.QueryTag</tag-class>

</tag>

<tag>

<name>insert</name> <tag-class>sdotags.InsertTag</tag-class>

</tag>