Эмпирическое правило, которое я использую, заключается в том, что скриптлеты (или теги JSP или EL в этом отношении) должны использовать только ту модель, которая уже была настроена контроллером, а не запускать действия, которые взаимодействуют с внутренними системами и получаютвещи.
Разница часто неуловима, но, на мой взгляд, весьма значительнаВ вашем примере, скажем, что для определения, является ли пользователь администратором, требуется доступ к какой-либо базе данных или вызов веб-службы.Тогда вы будете нарушать MVC, вызывая это действие из представления.Вызываете ли вы действие из скриптлета, тега JSP или EL, не имеет значения.Вы сделали то, что лучше всего делает контроллер.
Так как бы я решил эту проблему?Я бы поставил логику определения, находится ли пользователь в роли администратора в контроллере.Затем я сделал бы эту информацию доступной в модели, чтобы представление могло использовать модель, чтобы определить, находится ли пользователь в роли администратора.Простой $ {user.isAdmin} тогда ответил бы на вопрос из представления.Эта точка зрения не будет «обвинена» в инициировании каких-либо действий.
Итак, я пурист, будучи сторонником такого рода судебных запретов?Я считаю, что во многих случаях, когда требуется оптимизация приложения, мне легче сканировать контроллеры и оптимизировать то, что они делают.Если представление также запускает работу бэкэнда, тогда будет очень трудно выполнить этот вид оптимизации, так как взаимодействие с бэкэндом тогда будет разбросано по нескольким контроллерам и представлениям.
Это также нарушает принцип единственной ответственности.Надеюсь, что это ответ на ваш вопрос.
Кстати, отличный вопрос.Я рад, что вы думаете об этом до такого уровня детализации.