Наследование пользовательских тегов.

У меня есть пользовательский тег JSP "A", определенный в моем домене .tld. Он имеет 3 обязательных атрибута. У него есть свой ATagHAndler, который наследует SimpleTagHandler. Мне нужен новый тег "B", который делает то же самое, что и тег "A" выше, но немного по-другому. Также атрибуты, которые присутствуют в «A», я скопировал их в «B» в файле .tld (дублирование кода)). Кроме того, я создал BTagHandler, расширяющий ATagHandler, и переопределил несколько методов, которые фактически изменяются в этих двух обработчиках. Остальные функции определены в «ATagHandler. На стороне java это круто, потому что из-за наследования избегается дублирование кода.

Но в файле .tld с определением тега A и тега B есть дублирование определения атрибутов. Есть ли способ избежать этого дублирования. Если нет, есть ли совершенно другой подход к моей проблеме. (Оба тега делают одно и то же, но с небольшим изменением, поэтому я использовал наследование)

С уважением, Дипак


person Community    schedule 25.07.2009    source источник


Ответы (1)


Я думаю, вам придется жить с дублированием TLD, я не знаю способа сделать то, что вы хотите сделать. Это раздражает и кажется неправильным, но файлы TLD грубы и уродливы.

Однако у вас есть возможность реализовать интерфейс javax.servlet.jsp.tagext.DynamicAttributes. Это позволяет вам опускать объявления атрибутов из TLD, поэтому вам не нужно их повторять, но недостатком является то, что значения атрибутов будут передаваться в ваш тег как пара имя-значение, а не как свойство javabean, поэтому они не так приятно использовать.

Так что это выбор между неприятностями в TLD и неприятностями в Java. Сделайте ваш выбор.

person skaffman    schedule 25.07.2009
comment
+1. Что касается интерфейса DynamicAttributes, самой большой проблемой является отсутствие проверки во время компиляции. С TLD (какими бы грубыми они ни были) компиляция завершится ошибкой, если вы неправильно напишете атрибут; с динамическими атрибутами вы в лучшем случае получите JspException во время выполнения, а в худшем случае неправильный атрибут будет просто молча проглочен, что приведет к неопределенному поведению. - person ChssPly76; 26.07.2009