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