Il mio validatore deve sapere se si tratta di una richiesta completa o di una richiesta Ajax. Nella mia soluzione attuale a verificare l'intestazione di richiesta HTTP per l'elemento X-Requested-With
:Distinguere richieste Ajax da richieste complete nel validatore personalizzato JSF
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
if (req.getHeader("X-Requested-With") != null) {
// do something
} else {
// do something else
}
...
}
C'è un approccio migliore per raggiungere questo obiettivo? La mia soluzione è "sicura" rispetto ai diversi browser/librerie javascript?
UPDATE:
appena scoperto che il X-richiesta-Con intestazione è presente solo se la richiesta Ajax deriva dalla libreria dei componenti primefaces (il tag <p:ajax>
).
È non presente se utilizzo JSF normale <f:ajax>
. Quindi il mio approccio non funzionerà con<f:ajax>
.
Utilizzando <f:ajax>
c'è una diversa intestazione:
Faces-Request:partial/ajax
La soluzione proposta da Osw lavora per <f:ajax>
e<p:ajax>
:
PartialViewContext#isAjaxRequest()
Grazie per la risposta. Suona bene. Sai cosa fa il metodo? Forse controlla anche le intestazioni. –
@Matt, mi spiace, non ho idea di cosa faccia esattamente, ma le opzioni stanno controllando le intestazioni o controllando la mappa dei parametri della richiesta. – Osw
Ho aggiornato la mia domanda. Sembra che la mia soluzione non sia sicura. –