Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: CommunityОтветов: 1

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

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

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

tagsjsp

Ответы

Ответ 1 · рейтинг 2 · skaffman

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы