Статьи

Различение между различными видами фасоли JSF


JSF имеет простой
контейнер Inosion-of-Control (IoC),  называемый JSF 
Managed Bean Facility (MBF). Хотя он имеет подробный синтаксис XML и не так надежен, как
Spring BeanFactory ,
PicoContainer или
JBoss Microcontainer , MBF имеет основы контейнера IoC и предлагает такие функции, как
внедрение зависимостей .

Когда POJO управляется MBF JSF, его обычно называют управляемым компонентом. Но если вы собираетесь создать поддерживаемый веб-приложение / портлет JSF, необходимо различать различные виды управляемых компонентов. Эта практика также сохранит четкое разделение проблем, которые JSF обеспечивает путем реализации шаблона проектирования Model-View-Controller (MVC):

 

Тип управляемых бобов кличка Типичная сфера
Модель Managed-Bean Модель боб сессия

Описание: этот тип управляемого компонента участвует в «модели» модели проектирования MVC. Когда вы видите слово «модель» — подумайте ДАННЫЕ. Компонент JSF-модели должен быть POJO, который следует шаблону проектирования JavaBean с инкапсулирующими свойствами getter / setters. Наиболее распространенный вариант использования модельного компонента — это объект базы данных или просто представление набора строк из набора результатов запроса базы данных.

Бэк-бин поддержка боб запрос

Описание. Этот тип управляемого компонента участвует в «представлении» модели проектирования MVC. Назначение базового компонента — поддерживать логику пользовательского интерфейса и имеет отношение 1 :: 1 с представлением JSF или формой JSF в составе Facelet. Хотя обычно он имеет свойства стиля JavaBean со связанными получателями / установщиками, это свойства представления, а не модели данных базового приложения. У компонентов поддержки JSF также могут быть методы JSF actionListener и valueChangeListener.

Контроллер Управляемый Бин Контроллер-бобы запрос

Описание: этот тип управляемого компонента участвует в «контроллере» модели проектирования MVC. Цель bean-компонента контроллера — выполнить некоторую бизнес-логику и вернуть результат навигации в обработчик навигации JSF. Контроллер JSF обычно имеет методы действия JSF (а не методы actionListener).

Поддержка Managed-Bean Поддержка боб сеанс / приложение

Описание: этот тип bean-компонента «поддерживает» одно или несколько представлений в «представлении» модели проектирования MVC. Типичным вариантом использования является предоставление ArrayList <SelectItem> для JSF h: selectOneMenu раскрывающиеся списки, которые появляются в более чем одном представлении JSF. Если данные в раскрывающихся списках относятся к конкретному пользователю, то компонент будет оставаться в области сеанса. Однако если данные применяются ко всем пользователям (например, раскрывающимся спискам провинций), то компонент будет оставаться в области приложения, чтобы его можно было кэшировать для всех пользователей.

Утилита Managed-Bean полезности фасоли заявление

Описание: этот тип компонента предоставляет некоторый тип «служебной» функции для одного или нескольких представлений JSF. Хорошим примером этого может быть bean-компонент FileUpload, который можно повторно использовать в нескольких веб-приложениях.

 

Теперь … Одним из главных преимуществ в проведении таких четких различий является слабая связь . Что ты спрашиваешь? Что ж, давайте сначала посмотрим на пример тесной связи, где проблемы MVC могут быть разбиты / перепутаны в один управляемый компонент:

 

public class ModelAndBackingAndControllerBean {

private String fullName; // model-bean property
private boolean privacyRendered; // backing-bean property

// model-bean getter
public String getFullName() {
return fullName;
}

// model-bean setter
public void setFullName(String fullName) {
this.fullName = fullName;
}

// backing-bean getter
public boolean isPrivacyRendered() {
return privacyRendered;
}

// backing-bean setter
public void setPrivacyRendered(boolean privacyRendered) {
this.privacyRendered = privacyRendered;
}

// backing-bean actionListener for UI support logic
public void togglePrivacySection(ActionEvent actionEvent) {
privacyRendered = !privacyRendered;
}

// controller-bean business logic
public String submit() {
System.out.println("fullName=" + fullName);
return "success";
}
}

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

public class ModelBean {

private String fullName;

public void setFullName(String fullName) {
this.fullName = fullName;
}

public String getFullName() {
return fullName;
}
}

public class BackingBean {

private boolean privacyRendered;

public void setPrivacyRendered(boolean privacyRendered) {
this.privacyRendered = privacyRendered;
}

public boolean isPrivacyRendered() {
return privacyRendered;
}

public void togglePrivacySection(ActionEvent actionEvent) {
privacyRendered = !privacyRendered;
}

}

public class ControllerBean {

private ModelBean modelBean;

public ModelBean getModelBean() {
return modelBean;
}

public void setModelBean(ModelBean modelBean) {
// Dependency injected from the JSF managed-bean facility
this.modelBean = modelBean;
}

public String submit() {
System.out.println("fullName=" + getModelBean().getFullName());
return "success";
}

}

 

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

Наконец, мы можем использовать функции внедрения зависимостей JSF MBF для внедрения bean-компонента модели в bean-компонент контроллера. Это можно увидеть в следующем примере WEB-INF /face-config.xml, где используется привязка языка выражений (EL) # {modelBean}:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<managed-bean>
<managed-bean-name>modelBean</managed-bean-name>
<managed-bean-class>myproject.ModelBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>backingBean</managed-bean-name>
<managed-bean-class>myproject.BackingBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>controllerBean</managed-bean-name>
<managed-bean-class>myproject.ControllerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>modelBean</property-name>
<value>#{modelBean}</value>
</managed-property>
</managed-bean>
</faces-config>

 

С http://blog.icefaces.org/