jsf - define - Diferencia entre el valor y el enlace
templates jsf primefaces (2)
¿Cuál es la diferencia entre el uso de valor y el enlace con JavaServer Faces, y cuándo usarías uno frente al otro? Para aclarar cuál es mi pregunta, aquí hay un par de ejemplos simples.
Normalmente, con JSF en el código XHTML usaría "valor" como aquí:
<h:form>
<h:inputText value="#{hello.inputText}"/>
<h:commandButton value="Click Me!" action="#{hello.action}"/>
<h:outputText value="#{hello.outputText}"/>
</h:form>
Entonces el frijol es:
// 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";
}
}
Sin embargo, al usar "enlace", el código XHTML es:
<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>
y el correspondiente bean se llama bean de respaldo, y está aquí:
// 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";
}
}
¿Qué diferencias prácticas existen entre los dos sistemas y cuándo utilizarías un bean de respaldo en lugar de un frijol común? ¿Es posible usar ambos?
He estado confundido acerca de esto por algún tiempo, y apreciaría mucho tener esto aclarado.
A veces, realmente no necesitamos aplicar el valor de UIComponent a una propiedad de bean. Por ejemplo, puede necesitar acceder al UIComponent y trabajar con él sin aplicar su valor a la propiedad del modelo. En tales casos, es bueno usar un grano de respaldo en lugar de un grano regular. Por otro lado, en algunas situaciones, es posible que necesitemos trabajar con los valores del UIComponent sin necesidad de tener acceso programático a ellos. En este caso, puede ir con los frijoles normales.
Entonces, la regla es que use un bean de respaldo solo cuando necesite acceso programático a los componentes declarados en la vista. En otros casos usa los frijoles comunes.
value
atributo de value
representa el valor del componente . Es el texto que ve dentro de su cuadro de texto cuando abre la página en el navegador.
atributo de binding
se utiliza para vincular su componente a una propiedad de frijol. Para un ejemplo en tu código, tu componente inputText
está ligado al bean así.
#{backing_hello.inputText}`
Significa que puede acceder al componente completo y a todas sus propiedades en su código como un objeto UIComponent
. Puede hacer muchos trabajos con el componente porque ahora está disponible en su código de Java. Por ejemplo, puedes cambiar su estilo de esta manera.
public HtmlInputText getInputText() {
inputText.setStyle("color:red");
return inputText;
}
O simplemente para deshabilitar el componente de acuerdo con una propiedad de frijol
if(someBoolean) {
inputText.setDisabled(true);
}
y así....