Подтвердить что ты не робот

Разница между стоимостью и привязкой

В чем разница между использованием значения и привязкой к JavaServer Faces, и когда вы будете использовать один, а не другой? Чтобы яснее понять, что мой вопрос, здесь приводятся несколько простых примеров.

Обычно с JSF в коде XHTML вы должны использовать "значение", как здесь:

<h:form> 
  <h:inputText value="#{hello.inputText}"/>
  <h:commandButton value="Click Me!" action="#{hello.action}"/>
  <h:outputText value="#{hello.outputText}"/>
</h:form>

Затем bean:

// Imports
@ManagedBean(name="hello")
@RequestScoped
public class Hello implements Serializable {

private String inputText;
private String outputText;

public void setInputText(String inputText) {
    this.inputText = inputText;
}

public String getInputText() {
    return inputText;
}

// Other getters and setters etc.

// Other methods etc.

public String action() {

    // Do other things

    return "success";
}
}

Однако при использовании "привязки" код XHTML:

<h:form> 
  <h:inputText binding="#{backing_hello.inputText}"/>
  <h:commandButton value="Click Me!" action="#{backing_hello.action}"/>
  <h:outputText value="Hello!" binding="#{backing_hello.outputText}"/>
</h:form>

а соответствующий bean называется поддержкой bean и здесь:

// Imports
@ManagedBean(name="backing_hello")
@RequestScoped
public class Hello implements Serializable {

private HtmlInputText inputText;
private HtmlOutputText outputText;

public void setInputText(HtmlInputText inputText) {
    this.inputText = inputText;
}

public HtmlInputText getInputText() {
    return inputText;
}

// Other getters and setters etc.

// Other methods etc.

public String action() {

    // Do other things

    return "success";
}
}

Какие существуют практические различия между этими двумя системами, и когда вы использовали бы поддержку bean вместо обычного bean? Можно ли использовать оба?

Я немного смутился об этом в течение некоторого времени и был бы очень благодарен за то, что это прояснилось.

4b9b3361

Ответ 1

value атрибут представляет значение компонента. Это текст, который вы видите внутри своего текстового поля при открытии страницы в браузере.

Атрибут

binding используется для привязки вашего компонента к свойству bean. Для примера в вашем коде ваш компонент inputText привязан к bean, как это.

#{backing_hello.inputText}`

Это означает, что вы можете получить доступ к компоненту целый и всем его свойствам в вашем коде как объект UIComponent. Вы можете много работать с компонентом, потому что теперь он доступен в вашем Java-коде. Например, вы можете изменить свой стиль следующим образом.

public HtmlInputText getInputText() {
    inputText.setStyle("color:red");
    return inputText;
}

Или просто отключить компонент в соответствии со свойством bean

if(someBoolean) {
  inputText.setDisabled(true);
}

и т.д....

Ответ 2

Иногда нам не нужно применять значение UIComponent к свойству bean. Например, вам может потребоваться доступ к UIComponent и работа с ним, не применяя его значение к свойству модели. В таких случаях полезно использовать резервную копию bean, а не обычный bean. С другой стороны, в некоторых ситуациях нам, возможно, придется работать со значениями UIComponent, не требуя программного доступа к ним. В этом случае вы можете просто пойти с обычным beans.

Таким образом, правило заключается в том, что использовать поддержку bean только тогда, когда вам нужен программный доступ к компонентам, объявленным в представлении. В других случаях используйте обычный beans.