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() { // ... }
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, mentreh: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 utilizzah:button/h:link
. Per fare in modo che i valori vengano inviati conh: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 dopoh: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 componentih: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.