Что такое управляемый bean и сколько я должен использовать на странице?

Я работаю над веб-приложением, использующим JavaServer Faces.

Я нашел много примеров и руководств по использованию JavaServer Faces, но ни один из них не объясняет, для чего используется Bean. Мои первоначальные мысли заключались в том, что Beans представляют формы. Вы вводите данные в свою форму и нажимаете кнопку отправки, а связанный с ней Bean заполняется данными и вызывается метод.

Однако до сих пор я видел только примеры, где есть один Bean на страницу, поэтому Bean также может представлять страницу и, следовательно, содержать несколько форм.

Я также смущен о масштабах Bean. Если Bean представляет форму или страницу, она должна стать недействительной после завершения запроса. Если вы внесете Bean live в объем сеанса, что произойдет с Bean? Вы все еще можете каким-то образом получить данные из него или просто заполнить соответствующую форму для вас, как только вернетесь к ней?

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

Ответ 1

A bean является управляемым bean, когда вам никогда не нужно управлять экземпляром bean самостоятельно, как вручную, someScopedMap.put("bean", new Bean());. Эта структура позаботится об этом. Это не имеет никакого отношения к тому, содержит ли страница форму или нет. Вы в основном рассказываете о структуре "Привет, вот резервный bean класс com.example.Foo. Вы можете использовать его как управляемый bean с именем" foo "и поместить его в область X всякий раз, когда выражение EL ссылается на него через #{foo}", без необходимости делать все сами. Структура (JSF, CDI, Spring и т.д.) Управляет всеми собой.

Что касается выбора правильной области действия, то это логически зависит от области, в которой должны храниться данные. Например, вы, очевидно, не хотите хранить данные формы в области приложения. Любой другой посетитель сайта в противном случае видел бы это. Просто подумайте логично и прочитайте Как правильно выбрать область bean?

Что касается "одной концепции bean для каждой формы" или "одной bean для каждой страницы", это на самом деле субъективно, так как обе могут технически работать одинаково хорошо, но что касается ремонтопригодности, настоятельно рекомендуется сделать ваши классы такими же гладкими, как возможно, включая поддержку beans. Поэтому "одна bean за форму" - лучшая практика. Не бросайте совершенно разные обязанности вместе в одном классе. Закон demeter и т.д. Beans могут легко обращаться друг к другу с помощью @Inject или @ManagedProperty.

См. также: