JSF неявная или явная навигация
Я рассматривал возможность использования явных правил навигации по страницам в своем веб-приложении, когда натолкнулся на этот вопрос / ответ SO со следующей выдержкой из него:
... правила навигации устарели с версии JSF 2.0 благодаря новой функции "неявной навигации".
Тем не менее, я прошел большую часть учебного курса по CoreServlets JSF 2.0, и в нем есть раздел, посвященный явной навигации по страницам, и он благосклонно об этом говорит. Либо это идет вразрез с вышеупомянутой рекомендацией, либо я что-то неправильно понимаю.
Я не хочу создавать новое веб-приложение устаревшим образом. Кто-нибудь может пролить свет?
3 ответа
Это несколько субъективно, но все сводится к следующему:
Правила навигации в XML - адский ад.
Использование правил навигации предполагает, что рассматриваемое веб-приложение страдает от проблемы "один URL-адрес позади", которая приводит к ухудшению взаимодействия с пользователем (страницы не могут быть добавлены в закладки).
Использование правил навигации предполагает, что рассматриваемое веб-приложение использует POST для навигации по страницам, что вызывает не только плохой пользовательский опыт (страницы не могут быть добавлены в закладки), но также и плохой SEO (боты не индексируют POST, следовательно, POST-навигация страницы недоступны для публичных поисковых систем).
Смотрите также:
С чисто технической точки зрения правила навигации не являются устаревшими, поскольку ни спецификация, ни какой-либо API не помечают их как устаревшие, устаревшие или кандидаты на удаление.
Фактически, они получили некоторое возрождение в JSF 2.2 с функцией Faces Flow для многоразовых модулей.
Тем не менее, на практике и, конечно же, когда функция Faces Flow не используется, я никогда не видел особого применения для правил навигации в XML. Теоретически они облегчили бы техническое обслуживание (IIRC - это одна из их первоначальных целей проектирования), но на практике, как упоминает BalusC, это только приводит к адскому обслуживанию.
Но, как отметил BalusC, это СУБЪЕКТИВНО. Некоторым людям все еще нравится в первую очередь определять управляемые bean-компоненты, инъекции (проводку), отображения сущностей и то, что у вас есть в XML, а не с аннотациями (и с XML только как возможное переопределение или для глобальных вещей).
По моему мнению, правила навигации в основном отражают первоначальную попытку JSF слишком сильно абстрагироваться от HTTP и представляют высокоуровневую модель программирования, похожую на десктоп. В этой модели перенаправление на URL с параметрами запроса и вообще не имело места. В течение некоторого времени (начиная с JSF 2.0) JSF перешел на более среднюю модель, где простые запросы GET и PRG (Post-Redirect-GET) гораздо более широко используются. Следуя этой новой модели, вы действительно можете сказать, что правила навигации не имеют места, то есть фактически устарели.
Вы можете использовать либо.
Явное средство в XML-коде, что приводит к:
Дополнительные затраты, особенно если условия сложные (вы должны сопоставить результат метода действия с ожидаемыми значениями).
1b) Если есть опечатки, неявная навигация, вероятно, приведет к 404. Явная приведет к неправильной странице.
Вы можете использовать инструменты для рисования правил в графическом интерфейсе, которые впоследствии генерируют
faces-config.xml
,В последнее время изменение правил означает изменение XML (вам не нужно перекомпилировать). Если вы измените свои URL-адреса / имена страниц JSF, вам не нужно будет перекомпилировать.
Я бы сказал, что использование одного или другого является вопросом предпочтения, я очень счастлив, используя неявную навигацию.