В чем разница между Model bean и Backing bean в JSF?

Резюме, взятое из Эд Бернса и Криса Шалька, JSF Полная ссылка,

В этом примере указана страница входа с значением компонентов пользовательского интерфейса, привязанным к модели bean свойства для идентификатора пользователя и пароля, которые имеют тип String:

<h:inputText id="userid" value="#{login.userid}" />
and
<h:inputSecret id="password" value="#{login.password}" />

@ManagedBean
@RequestScoped
public class Login {
    String userid;
    String password;

    public Login() {
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    // Action Method
    public String loginAction() {
        if (userid.equals("guest") && password.equals("welcome")) {
            return "success";
        } else {
            return "failure";
        }
    }
}

Страница Facelet вместо использования привязки компонента для установки ссылку с компонентов пользовательского интерфейса на странице на компоненты пользовательского интерфейса , объявленные в резервной копии bean. Код JSF View для этого

<h:inputText id="userid" binding="#{login_Backing.userid}" />
and
<h:inputSecret id="password" binding="#{login_Backing.password}" />

В этом примере резервная копия bean зарегистрирована с именем "login_Backing" и содержит декларации UIInput.

В качестве альтернативы привязке значений полей ввода на странице к свойствам модели, мы вместо этого просто объявить свойства UIInput в резервной копии bean, используя

    private HtmlInputText userid;
    private HtmlInputSecret password;
    // Getters and setters for these properties not shown
public String loginAction() {
        if (userid.getValue().equals("guest") &&
        password getValue().equals("welcome"))
            return "success";
        else
            return "failure";
    }

(Оба HtmlInputText и HtmlInputSecret напрямую распространяются на UIInput.)

Обратите внимание на использование getValue(). Это связано с тем, что код должен извлекать значение из компоненты пользовательского интерфейса, идентификатор пользователя и пароль, тогда как раньше (выше с атрибутом значение) это было просто сравнивая Строковые свойства в модели bean. Как вы можете видеть, привязка этого компонента изменение примера входа в систему показывает, как можно просто использовать компоненты пользовательского интерфейса в поддержка beans для хранения переходных значений (таких как учетные данные для входа), а не для передачи эти значения непосредственно на Модель beans. Он также показывает, что размещение кода обработки событий, такого как как loginAction(), в поддержку bean - это лучше практика , чем размещение в модели bean, который не является предполагаемым, чтобы содержать код, связанный с пользовательским интерфейсом.

Итак, вышеупомянутая разница заключается только в разностной поддержке b/w beans и модели beans?

Ответы