Совместно ли используются представления JSF между пользователями?

Я определил количество логических представлений и представлений в атрибутах сеанса в web.xml равным 1, так что существует только максимум 1 представление. В связи с этим у меня есть пара вопросов:

  • Это # относится к данному пользователю? Это означает, что это ограничивает количество просмотров до 1 на пользователя? ** Если да, может ли быть несколько представлений одного и того же JSP для нескольких пользователей?

  • Есть ли способ поделиться представлением JSF между пользователями (учитывая, что представление является довольно общим и не содержит никаких данных, специфичных для пользователя)?

Спасибо!


person krish p    schedule 02.08.2011    source источник


Ответы (1)


Если ваше общее определение «пользователя» фактически равнозначно «сеансу HTTP», то да, вы правы. Представления в основном хранятся в сеансе HTTP, и на них ссылается скрытое поле ввода HTML с именем javax.faces.ViewState. Различные сеансы HTTP не будут обмениваться своими представлениями друг с другом, что в противном случае, очевидно, было бы огромной ошибкой и дырой в безопасности.

Установив количество (логических) представлений в сеансе равным 1, вы тем не менее исключаете возможность того, что пользователь может использовать несколько представлений, содержащих формы POST, в разных окнах/вкладках в одном сеансе. Каждый раз, когда конечный пользователь открывает новое окно/вкладку, конечный пользователь будет получать ViewExpiredException каждый раз, когда конечный пользователь запускает запрос POST в предыдущем окне/вкладке, потому что вы настроили его так, чтобы в нем сохранялось только одно представление. сессия, которая является последней открытой.

person BalusC    schedule 02.08.2011
comment
Спасибо BalusC. Хм.. :-( Как в таком случае лучше всего иметь дело с довольно статическими представлениями (также известными как доступные только для чтения) в JSF? Предположим, что большая часть страницы является общей для пользовательской базы, за исключением некоторых исключений, поэтому я хочу t использовать существующие представления в максимально возможной степени в разных сеансах (в интересах сокращения общего объема памяти).Возможно ли это в мире JSF (внутри портлета)?Надеюсь, что нет. - person krish p; 02.08.2011
comment
Я не хочу дополнительных накладных расходов на bean-компонент с областью запроса (поскольку это увеличит количество инициализаций). Я больше склоняюсь к bean-компоненту с областью действия приложения, учитывая характер данных и его универсальность для пользователей. Вы упомянули область представления, но я не использую область представления. Что мне до сих пор не ясно, так это то, что каждый JSP приведет к уникальному представлению (для данного сеанса). Хотя я могу играть с областью действия упомянутых bean-компонентов, я хочу иметь возможность совместно использовать одно и то же представление (учитывая его общий характер) во всех сеансах, тем самым сокращая общее количество просмотров. - person krish p; 02.08.2011
comment
Представление создается и сохраняется в сеансе только тогда, когда оно содержит форму POST, как в <h:form>. Если у вас их нет (тоже не для простой навигации по страницам!), то вам также не нужно об этом беспокоиться. Кстати, в JSF 2.x средний размер представления действительно значительно уменьшен по сравнению с JSF 1.x благодаря новому механизму частичного сохранения состояния. Тогда состояние содержит только необходимые компоненты формы, а не всю разметку. - person BalusC; 02.08.2011
comment
Пожалуйста, не обращайте внимания на мой первый комментарий, который вы, очевидно, видели до того, как я его удалил. Я смешал ваш вопрос с другим вопросом. Я уже удалил его. - person BalusC; 02.08.2011
comment
Учитывая, что первым шагом в жизненном цикле JSF является восстановление представления, не будет ли представление создано или восстановлено (одно из двух) независимо от того, есть ли в JSP теги ‹h:form› или нет? Разумеется, весь код JSF находится в элементе ‹f:view›. - person krish p; 02.08.2011
comment
Возможно, вы имели в виду JSF 1.0/1.1. Начиная с JSF 1.2, представление сохраняется, только если оно имеет <h:form>. То же представление восстанавливается только по запросу POST (поскольку в сеансе нет доступа к запросу GET). Начиная с JSF 2.0, вместо всего представления сохраняется только часть, содержащая компоненты UIForm, UIInput, UICommand и т. д. - person BalusC; 02.08.2011
comment
Спасибо BalusC. Цените все лиды! - person krish p; 02.08.2011
comment
Хорошо, я проделал большой анализ кучи и достаточно лучше разобрался с распределением объектов JSF. Тем не менее, я не вижу способа предотвратить рост объема памяти JSF (точнее, RichFaces AJAXStateHolder) по мере увеличения количества пользователей, ДАЖЕ ХОТЯ мои страницы являются довольно общими для пользователей и мало, если вообще что-либо, делать с конкретным пользователем. - person krish p; 09.08.2011