Differenza tra h: button e h: commandButton

In JSF 2, qual è la differenza tra h:button e h:commandButton ?

Il genera un HTML . L’elemento generato utilizza JavaScript per navigare alla pagina data dal outcome dell’attributo, utilizzando una richiesta HTTP GET.

Per esempio

  

genererà

  

Anche se questo finisce in un cambio di URL (bookmarkable) nella barra degli indirizzi del browser, questo non è SEO-friendly. Searchbots non seguirà l’URL nel onclick . Faresti meglio a usare o se SEO è importante sull’URL indicato. Se necessario, puoi inserire alcuni CSS nell’elemento HTML generato per farlo sembrare un pulsante.

Si noti che mentre è ansible inserire un’espressione EL facendo riferimento a un metodo nell’attributo outcome come di seguito,

  

non verrà richiamato quando fai clic sul pulsante. Al contrario, è già invocato quando la pagina contenente il pulsante viene sottoposta a rendering al solo scopo di ottenere l’esito della navigazione da incorporare nel codice onclick generato. Se si è tentato di utilizzare la syntax del metodo di azione come in outcome="#{bean.action}" , si sarebbe già accennato a questo errore / errato concetto di fronte a javax.el.ELException: Imansible trovare la proprietà actionMethod nella class com . esempioBianco .

Se si intende richiamare un metodo come risultato di una richiesta POST, utilizzare invece , vedere sotto. Oppure, se si intende richiamare un metodo come risultato di una richiesta GET, dirigersi su Richiama azione bean JSF gestita al caricamento della pagina o se si dispone anche dei parametri di richiesta GET tramite , Come si elaborano i parametri URL stringa query GET in backing bean al caricamento della pagina?


genera un pulsante HTML che invia per impostazione predefinita il genitore utilizzando il metodo HTTP POST e richiama le azioni associate action , actionListener e / o actionListener se ce ne sono è richiesto.

Per esempio

    

genererà

 

Si noti che quindi invia alla pagina corrente (l’URL di azione del modulo verrà visualizzato nella barra degli indirizzi del browser). Successivamente verrà inoltrato alla pagina di destinazione, senza alcuna modifica dell’URL nella barra degli indirizzi del browser. È ansible aggiungere il parametro ?faces-redirect=true al valore del risultato per triggersre un reindirizzamento dopo il POST (come per il pattern Post-Redirect-Get ) in modo che l’URL di destinazione diventi un segnalibro.

Il viene in genere utilizzato esclusivamente per inviare un modulo POST, non per eseguire la navigazione da pagina a pagina. Normalmente, l’ action punta a qualche azione aziendale, come il salvataggio dei dati del modulo in DB, che restituisce un risultato String .

  

con

 public String save() { // ... return "otherpage"; } 

Il reso null o void ti riporterà alla stessa vista. Restituisce anche una stringa vuota, ma ricrea qualsiasi bean con scope vista. In questi giorni, con i moderni JSF2 e , più che spesso le azioni tornano alla stessa vista (quindi, null o void ) in cui i risultati sono condizionatamente resi da ajax.

 public void save() { // ... } 

Guarda anche:

  • Come navigare in JSF? Come rendere l’URL riflette la pagina corrente (e non quella precedente)
  • Quando dovrei usare h: outputLink invece di h: commandLink?
  • Differenze tra azione e azioneListener

h:button – facendo clic su un h:button emette una richiesta GET segnalibro.

h:commandbutton – Invece di una richiesta get, h:commandbutton emette una richiesta POST che rimanda i dati del modulo al server.

h: commandButton deve essere racchiuso in ah: form e ha le due modalità di navigazione, ovvero statico impostando l’attributo action e dynamic impostando l’attributo actionListener, quindi è più avanzato come segue:

    

questo codice genera il follwing html:

 

mentre il pulsante h: è più semplice e viene semplicemente utilizzato per la navigazione statica o basata su regole come segue

  

l’html generato è

  Facelet Title 

Contributo di Ed Burns e Chris Schalk book The Complete Reference

Confronto tra h: commandButton eh: button

Qual è la differenza tra h: commandButton / h: commandLink eh: button / link?

Gli ultimi due componenti sono stati introdotti in 2.0 per abilitare le pagine JSF con segnalibri , quando utilizzati in concerto con la funzione “Visualizza parametri” .

Esistono 3 differenze principali tra h: button / h: link e h: commandButton / h: commandLink .

Innanzitutto, h:button/h:link induce il browser a emettere una richiesta HTTP GET, mentre h:commandButton/h:commandLink fa un modulo POST. Ciò significa che tutti i componenti della pagina che hanno valori immessi dall’utente, come campi di testo, caselle di controllo, ecc., Non verranno automaticamente inviati al server quando si utilizza h:button/h:link . Per fare in modo che i valori vengano inviati con h:button/h:link , è necessario eseguire un’azione aggiuntiva, utilizzando la funzione “Visualizza parametri”.

La seconda differenza principale tra i due tipi di componenti è che h:button/ h:link ha un attributo esito per descrivere dove andare dopo h:commandButton/ h:commandLink usa un attributo action a questo scopo. Questo perché il primo non genera un ActionEvent nel sistema degli eventi, mentre il secondo lo fa.

Infine, e soprattutto per la completa comprensione di questa funzionalità, i componenti h:button/h:link sì che al sistema di navigazione venga chiesto di ricavare l’esito durante il rendering della pagina, e la risposta a questa domanda è codificata nel markup della pagina. Al contrario, i componenti h:commandButton/h:commandLink sì che al sistema di navigazione venga chiesto di ricavare il risultato sul POSTBACK dalla pagina. Questa è una differenza di tempo. Il rendering avviene sempre prima del POSTBACK.

Ecco cosa hanno da dire i javadoc JSF sull’attributo action commandButton :

MethodExpression rappresenta l’azione dell’applicazione da richiamare quando questo componente viene triggersto dall’utente. L’espressione deve valutare un metodo pubblico che non accetta parametri e restituisce un object (il toString () di cui è chiamato per derivare il risultato logico) che viene passato a NavigationHandler per questa applicazione.

Sarebbe illuminante per me se qualcuno potesse spiegare cosa ha a che fare con una qualsiasi delle risposte in questa pagina. Sembra abbastanza chiaro che l’ action riferisca al nome di qualche pagina e non a un metodo.