Mi validador necesita saber si se trata de una solicitud completa o una solicitud ajax. En mi solución actual puedo comprobar el encabezado de solicitud HTTP para el elemento X-Requested-With
:Distingue las solicitudes ajax de las solicitudes completas en el validador personalizado 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
}
...
}
¿Hay un mejor enfoque para lograr esto? ¿Mi solución es "segura" con respecto a diferentes navegadores/librerías de JavaScript?
UPDATE:
acaba de descubrir que el X-Requested-With cabecera sólo está presente si la petición ajax proviene de la biblioteca de componentes Primefaces (la etiqueta <p:ajax>
).
Es no presente si utilizo JSF <f:ajax>
llano. Así que mi enfoque no funcionará con<f:ajax>
.
Usando <f:ajax>
hay una cabecera diferente:
Faces-Request:partial/ajax
La solución propuesta por Osw trabaja para <f:ajax>
y<p:ajax>
:
PartialViewContext#isAjaxRequest()
Gracias por su respuesta. Suena bien. ¿Sabes lo que hace el método? Tal vez solo busca encabezados también. –
@Matt, lo siento, no tengo idea de lo que hace exactamente, pero las opciones son comprobar los encabezados o verificar el mapa de parámetros de solicitud. – Osw
He actualizado mi pregunta. Parece que mi solución no es segura. –