Taglibs против Javaclass:или как наилучшим образом совместить и то, и другое
Вопрос
В настоящее время я пишу шаблон для OpenCms, CMS на основе Java с очень хорошей поддержкой библиотеки тегов и мощным API.
В любом случае, когда я смотрю на учебные пособия или исходный код, примерно 50-50 случаев, когда библиотеки тегов или Java-классы используются для генерации (html)-вывода.
Я стараюсь поддерживать чистоту своих JSP, то есть не использовать много скриптлетного кода (вместо этого использую JSTL и т. д.).В какой-то момент мне может понадобиться больше контроля над кодом, тогда появятся Java-классы, и здесь я не знаю, как далеко мне следует зайти (лично мне не нравится идея генерации HTML в классе).
Вот некоторые плюсы и минусы, которые у меня есть:
- Благодаря библиотекам тегов мне не нужно каждый раз перезапускать контейнер сервлетов.Я просто вношу изменения и вижу результат
- JSP taglib легче поддерживать, особенно для веб-дизайнеров, из-за «того же» синтаксиса.
- Javaclass обеспечивает полную/дополнительную поддержку IDE (проверка типа/синтаксиса).
- При более сложных требованиях код Javaclass становится чище (по сравнению с помещением переменных в контекст страницы в JSP).
- EL (язык выражений) добавляет больше возможностей JSP/taglib, но это снова другой синтаксис, и его нужно изучить.
Есть ли какие-либо рекомендации о том, как подойти к этому?Поскольку есть другие коллеги, которым, вероятно, придется поддерживать это в будущем, я ищу чистое/поддерживаемое решение. Вероятно, вы все знаете ситуацию, когда вы смотрели на чей-то код и думали: «О чем, черт возьми, он/она думал» ;)
Решение
Раньше я придерживался этого довольно просто.
Используйте библиотеки тегов, когда целью является презентация. Допустим, у вас есть блок кода отображения, который вы собираетесь повторно использовать на нескольких страницах, в случае StackOverflow, скажем, код стрелки.Поскольку это должно просто отображать данные, ему не нужен код Java, и я бы использовал библиотеку тегов.
Используйте код Java, когда вам нужно свернуть данные. Если вам нужно просмотреть пакет ресурсов или применить к чему-либо необщее форматирование, я бы использовал код Java, хотя для этого я предпочитаю функции JSTL тегам.
Не используйте ни один из них для доступа к базам данных.