Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between value and binding

Tags:

jsf

What is the difference between using value and binding with JavaServer Faces, and when would you use one as opposed to the other? To make it clearer what my question is, a couple of simple examples are given here.

Normally with JSF in the XHTML code you would use "value" as here:

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

Then the bean is:

// 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";
}
}

However, when using "binding", the XHTML code is:

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

and the correspondibg bean is called a backing bean, and is here:

// 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";
}
}

What practical differences are there between the two systems, and when would you use a backing bean rather than a regular bean? Is it possible to use both?

I have been confused about this for some time, and would most appreciate having this cleared up.

like image 488
csharp Avatar asked Dec 03 '12 10:12

csharp


People also ask

What is the difference between bind and bind value?

In Blazor, there is no significant difference between using these two attributes. The @bind attribute is a shorthand of the @bind-value attribute and its delegate will trigger the ValueChanged event of the component.

What is the use of binding attribute in JSF?

If it's not precreated, then JSF will autocreate the component "the usual way" and invoke the setter behind binding attribute with the autocreated component instance as argument. In effects, it binds a reference of the component instance in the component tree to a scoped variable.


2 Answers

value attribute represents the value of the component. It is the text that you see inside your text box when you open the page in browser.

binding attribute is used to bind your component to a bean property. For an example in your code your inputText component is bound to the bean like this.

#{backing_hello.inputText}`

It means that you can access the whole component and all its properties in your code as a UIComponent object. You can do lot of works with the component because now it is available in your java code. For an example you can change its style like this.

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

Or simply to disable the component according to a bean property

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

and so on....

like image 174
prageeth Avatar answered Sep 21 '22 19:09

prageeth


Sometimes we don't really need to apply the value of UIComponent to a bean property. For example you might need to access the UIComponent and work with it without applying its value to the model property. In such cases it's good to use a backing bean rather than a regular bean. On the other hand in some situations we might need to work with the values of the UIComponent without any need of programmatic access to them. In this case you can just go with the regular beans.

So, the rule is that use a backing bean only when you need programmatic access to the components declared in the view. In other cases use the regular beans.

like image 3
Sandeep Panda Avatar answered Sep 20 '22 19:09

Sandeep Panda