Come funziona l'attributo 'binding' in JSF? Quando e come dovrebbe essere usato?


Answers

ogni componente JSF si rilascia in HTML e ha il controllo completo su quale HTML produce. Ci sono molti trucchi che possono essere usati da JSF, e esattamente quale di questi trucchi sarà usato dipende dall'implementazione JSF che stai utilizzando.

  • Assicurati che ogni input abbia un nome univoco, in modo che quando il modulo viene nuovamente inviato all'albero dei componenti che lo ha reso, è facile dire dove ciascun componente può leggere la sua forma di valore.
  • Il componente JSF può generare javascript che invia nuovamente al serer, il javascript generato sa dove è legato anche ciascun componente, perché è stato generato dal componente.
  • Per cose come hlink puoi includere informazioni di binding nella url come parametri di query o come parte dell'url stesso o come parametri di matrx. per esempio.

    http:..../somelink?componentId=123 consentirebbe a jsf di cercare nella struttura dei componenti per vedere che il collegamento 123 è stato cliccato. oppure potrebbe e htp:..../jsf;LinkId=123

Il modo più semplice per rispondere a questa domanda è creare una pagina JSF con un solo link, quindi esaminare l'output html che produce. In questo modo saprai esattamente come ciò avviene usando la versione di JSF che stai utilizzando.

Question

Ci sono molti materiali là fuori che differenziano l'attributo del value e binding attributo di binding in JSF.

Sono interessato a come entrambi gli approcci differiscono l'uno dall'altro. Dato:

public class User {
    private String name;
    private UICommand link;

    // Getters and setters omitted.
}
<h:form>
    <h:commandLink binding="#{user.link}" value="#{user.name}" />
</h:form>

È piuttosto semplice ciò che accade quando viene specificato un attributo value . Il getter viene eseguito per restituire il valore della proprietà name del bean User . Il valore è stampato sull'output HTML.

Ma non riuscivo a capire come funziona il binding . In che modo l'HTML generato mantiene un legame con la proprietà link del bean User ?

Di seguito è riportata la parte rilevante dell'output generato dopo l'abbellimento manuale e il commento (si noti che l'id j_id_jsp_1847466274_1 stato generato automaticamente e che sono presenti due widget di input nascosti). Sto usando Sun's JSF RI, versione 1.2.

<form action="/TestJSF/main.jsf" enctype="application/x-www-form-urlencoded"
    id="j_id_jsp_1847466274_1" method="post"  name="j_id_jsp_1847466274_1">
    <input name="j_id_jsp_1847466274_1" type="hidden" value="j_id_jsp_1847466274_1">
    <a href="#" onclick="...">Name</a>
    <input autocomplete="off" id="javax.faces.ViewState" name="javax.faces.ViewState"
        type="hidden" value="-908991273579182886:-7278326187282654551">
</form>

Dove è memorizzato il binding qui?