2013-12-05 4 views
0

У меня есть bean @ApplicationScoped, который я создаю кучу экземпляров. Затем я использую эти экземпляры для создания страницы JSF с данными, содержащимися в экземплярах. Я хочу, чтобы пользователь мог модифицировать эти данные (только для их использования, а не для сохранения), но не влияет на представление для других пользователей, которые имеют доступ к одному и тому же компоненту. Я рассматриваю возможность создания @SessionScoped версии фаната @ApplicationScoped для каждого нового сеанса, но я не уверен, что лучший способ сделать это. Должен ли я:Создать SessionScoped версию ApplicationScoped bean

  1. Продлить @ApplicationScoped фасоль и дать ему @SessionScoped, то в моем конструкторе захватить все relvant данных?

  2. Не создавать версию @SessionScoped, а создать «пользовательскую» версию для каждой части данных, которую пользователь может изменить в bean-компоненте @ApplicationScoped?

  3. Другие идеи?

+2

Создайте совершенно новый компонент '@ SessionScoped' с необходимыми данными. –

+0

@LuiggiMendoza Мне нужны некоторые методы в компоненте '@ ApplicationScoped', поэтому я думал о его расширении. Почему лучше создать новый bean-компонент? – taylordurden

+0

Затем введите свой компонент '@ ApplicationScoped' в ваш компонент' @ SessionScoped'. –

ответ

2

У меня есть @ApplicationScoped боб, который я создаю кучу экземпляров из.

Это не так, настоящая цель bean-компонента состоит в том, чтобы свести к минимуму избыточность данных в памяти кучи JVM. В любой момент должен быть только один экземпляр, один экземпляр всегда доступен любым другим облачным облакам. Как было предложено Луиджи Мендосой выше, вы можете пойти на фасоль @SessionScoped или @ViewScoped, в зависимости от вашего варианта использования.

Но просто никогда не используйте bean-компонент @ApplicationScoped, если данные не будут использоваться совместно или сохраняться.

1

Я очень рекомендую вам прочитать этот другой вопрос, чтобы улучшить свой дизайн архитектуры: Understanding JSF as a MVC framework

Кажется, вы начали код в неправильном смысле. На этапе разработки вы должны сначала подумать о @sessionscoped beans, что ваше приложение будет нужно (что-то, как мышление в ваших потребностях пользователей). Затем вы должны позаботиться о @applicationscoped beans (как и ваши потребности в глобальных приложениях).

Это действительно странно, чтобы построить @sessionscoped bean, распространяя его на @applicationscoped bean.

Вы должны написать @sessionscoped со всеми необходимыми данными и инициализировать его соответствующими данными, как вы сказали. Вы по-прежнему сможете получить доступ к методу @applicationscoped. Во всяком случае, старайтесь как можно больше свести к минимуму доступ к @apllicationscoped beans, код в @sessionscoped bean.

С уважением,

Смежные вопросы