Каков наилучший способ отправки параметров между страницами? - PullRequest
3 голосов
/ 02 марта 2010

Мы используем JSF в нашем проекте (я новичок в этом деле), где на каждой странице есть Java-файл с обратным компонентом.

Чтобы переместить (перенаправить) с одной страницы на другую, мне нужно поместить все параметры (критерии поиска) в область запроса перед перенаправлением, а затем извлечь его обратно в конструкторе следующей страницы. Когда у вас есть несколько страниц глубиной, и вы хотите вернуться к началу, это становится действительно раздражающим, чтобы поддерживать.

Например, если у меня есть страница 1 с расширенными фильтрами поиска, которая перенаправляет на страницу 2, в зависимости от выбранного элемента, и со страницы 2, вы получите другой список, где вы можете перейти на страницу 3 для получения подробной информации. Теперь каждый раз, когда мне нужно поместить все параметры в область запроса / прочитать их снова, сохранить их в скрытых полях и вернуть их обратно.

Что именно не так с этим методом, и какой лучший способ сделать это в JSF?

EDIT : среда - IBM Rational Application Developer (RAD), которая имеет собственную реализацию JSF. Не уверен, что это имеет значение.

Ответы [ 3 ]

5 голосов
/ 02 марта 2010

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

Просто спроектируйте интеллектуальные bean-компоненты (не имеет смысла иметь разные bean-компоненты, содержащие одни и те же данные) и используйте h:inputHidden там, где это необходимо, при необходимости в сочетании с внедрением управляемого свойства. Это действительно немного боль в коде и поддержке. С другой стороны, вы также можете просто взять Томагавк <t:saveState>, если передаваемые данные на самом деле столь же велики, как и "целый" управляемый компонент. На странице JSF это стоит всего одна строка и всегда оказывало большую помощь.

* Например, если у меня есть страница 1 с расширенными поисковыми фильтрами, которая перенаправляет на страницу 2, в зависимости от выбранного элемента, и со страницы 2, вы получите другой список, где вы можете перейти на страницу 3 для получения подробной информации. Теперь каждый раз, когда мне нужно поместить все параметры в область запроса / прочитать их снова, сохранить их в скрытых полях и вернуть их обратно.

Что именно не так с этим методом и как лучше это сделать в JSF? *

В этом методе нет ничего плохого. Может быть, вы неправильно его закодировали, из-за чего он выглядит излишне сложным. Я не могу сказать ничего, если вы не публикуете подробности об используемом коде.

Согласно вашему редактированию:

РЕДАКТИРОВАТЬ: среда IBM Rational Application Developer (RAD), которая имеет собственную реализацию JSF. Не уверен, если это имеет значение.

Это не правда. У IBM нет никакой реализации JSF. Он имеет только библиотеку компонентов (плохо поддерживаемые компоненты с префиксом hx, также известные как «Faces Client Framework»). WSAD / RAD поставляется с Sun JSF RI (Mojarra) в качестве стандартной реализации JSF, хотя обычно это сильно устаревшая версия. Убедитесь, что вы держите его в курсе.

1 голос
/ 02 марта 2010

Сделайте вашу сессию управляемого объекта EJB
Если вы используете MyFaces, вы можете использовать PageFlowScope . При использовании шва используйте область беседы.
Если область потока страниц или область диалога недоступны, используйте бины сессий. Кроме того, вы можете использовать PhaseListener для инициализации или выполнения определенных методов перед вызовом страницы. В том случае, если поток является page1 -> page2 -> page3, инициализируйте bean-объект сессий в PhaseListener, если вызывается page1.
Я буду обновлять с дополнительной информацией, если вам нужно.

1 голос
/ 02 марта 2010

Если честно, я только начинаю с JSF, но я подумал, что вы можете сохранить управляемые bean-компоненты в области сеанса, таким образом, имея возможность получать доступ к bean-компоненту при каждом запросе? Вы также можете сохранить состояние на стороне клиента, избегая неприятностей из-за зависания сеанса и прочего.

Таким образом, вы можете сохранить данные, которые вы в настоящее время передаете, в качестве параметров запроса в управляемом компоненте в рамках сеанса, и они будут доступны для любых запросов в сеансе этого пользователя, уничтоженных по истечении времени сеанса или намеренно аннулированных (скажем выход пользователя из системы).

Я не думаю, что JSF в настоящее время поддерживает состояние диалога, которое, я думаю, может быть точным решением вашей проблемы, может быть, управляемый bean-объект сессионной области был бы прагматическим решением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...