价值与约束力的区别

时间:2012-12-03 10:50:50

标签: jsf

使用值和JavaServer Faces绑定有什么区别,你何时使用一个而不是另一个?为了更清楚我的问题,这里给出了几个简单的例子。

通常在XHTML代码中使用JSF,您可以使用“value”,如下所示:

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

然后豆子是:

// 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>

并且Corresponibg 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?可以同时使用两者吗?

我已经对此感到困惑已有一段时间了,并且非常希望能够解决这个问题。

2 个答案:

答案 0 :(得分:39)

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);
}

依旧......

答案 1 :(得分:2)

有时我们并不需要将UIComponent的值应用于bean属性。例如,您可能需要访问UIComponent并使用它而不将其值应用于model属性。在这种情况下,使用支持bean而不是常规bean是很好的。另一方面,在某些情况下,我们可能需要使用UIComponent的值,而无需对它们进行编程访问。在这种情况下,您可以使用常规bean。

因此,规则是只有在需要以编程方式访问视图中声明的组件时才使用支持bean。在其他情况下使用常规bean。