JSF неявная или явная навигация

Я рассматривал возможность использования явных правил навигации по страницам в своем веб-приложении, когда натолкнулся на этот вопрос / ответ SO со следующей выдержкой из него:

... правила навигации устарели с версии JSF 2.0 благодаря новой функции "неявной навигации".

Тем не менее, я прошел большую часть учебного курса по CoreServlets JSF 2.0, и в нем есть раздел, посвященный явной навигации по страницам, и он благосклонно об этом говорит. Либо это идет вразрез с вышеупомянутой рекомендацией, либо я что-то неправильно понимаю.

Я не хочу создавать новое веб-приложение устаревшим образом. Кто-нибудь может пролить свет?

3 ответа

Решение

Это несколько субъективно, но все сводится к следующему:

  1. Правила навигации в XML - адский ад.

  2. Использование правил навигации предполагает, что рассматриваемое веб-приложение страдает от проблемы "один URL-адрес позади", которая приводит к ухудшению взаимодействия с пользователем (страницы не могут быть добавлены в закладки).

  3. Использование правил навигации предполагает, что рассматриваемое веб-приложение использует 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-коде, что приводит к:

  1. Дополнительные затраты, особенно если условия сложные (вы должны сопоставить результат метода действия с ожидаемыми значениями).

    1b) Если есть опечатки, неявная навигация, вероятно, приведет к 404. Явная приведет к неправильной странице.

  2. Вы можете использовать инструменты для рисования правил в графическом интерфейсе, которые впоследствии генерируют faces-config.xml,

  3. В последнее время изменение правил означает изменение XML (вам не нужно перекомпилировать). Если вы измените свои URL-адреса / имена страниц JSF, вам не нужно будет перекомпилировать.

Я бы сказал, что использование одного или другого является вопросом предпочтения, я очень счастлив, используя неявную навигацию.

Другие вопросы по тегам