值和绑定之间的区别

Posted

技术标签:

【中文标题】值和绑定之间的区别【英文标题】:Difference between value and binding 【发布时间】:2012-11-20 19:51:03 【问题描述】:

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

通常在 Xhtml 代码中使用 JSF,您会在此处使用“值”:

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

对应的ibg bean称为backing 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";


这两个系统之间有什么实际区别,您什么时候会使用 backing bean 而不是常规 bean?可以同时使用吗?

我对此感到困惑有一段时间了,如果能解决这个问题,我将不胜感激。

【问题讨论】:

相关:***.com/questions/12506679/… 【参考方案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);

等等……

【讨论】:

好的,非常感谢您的回复。所以换句话说,绑定比获取值更强大,因为你得到了整个组件。但是,当在 JSF 还原视图中...... Render Response 循环是绑定渲染的,与 value 相比? 如果我正确理解了您的问题,答案是“是”。当您加载页面时,将调用绑定到 bean 的组件中的getters 并恢复组件。【参考方案2】:

有时我们并不真正需要将 UIComponent 的值应用于 bean 属性。例如,您可能需要访问 UIComponent 并使用它而不将其值应用于模型属性。在这种情况下,最好使用 backing bean 而不是普通 bean。另一方面,在某些情况下,我们可能需要使用 UIComponent 的值而不需要对它们进行任何编程访问。在这种情况下,你可以只用普通的豆子。

因此,规则是仅当您需要对视图中声明的组件进行编程访问时才使用支持 bean。在其他情况下,请使用常规 bean。

【讨论】:

以上是关于值和绑定之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中标量、表值和聚合函数之间的区别?

编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别

在c语言编程中,传值方式和传引用方式之间有啥区别?

什么是值和引用语义及其区别

“使用”和“重新绑定”变量之间的含义和区别是啥?

WSDL中SOAP绑定和HTTP绑定之间的区别