2011-09-15 8 views
9

유효성 검사기는 전체 요청인지 또는 ajax 요청인지 알아야합니다. 내 현재 솔루션에서 나는 X-Requested-With 요소에 대한 HTTP 요청 헤더를 확인이를 달성하기 위해 더 나은 방법은JSF 사용자 정의 유효성 검사기에서 전체 요청으로부터 ajax 요청을 구별하십시오.

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 
     } 
     ... 
} 

있습니까? 내 솔루션은 다른 브라우저/자바 스크립트 라이브러리와 관련하여 "안전"합니까?

UPDATE :

그냥 아약스 요청이 Primefaces 구성 요소 라이브러리합니다 (<p:ajax> 태그)에서 오는 경우 X가-요청-으로 헤더에만 존재한다는 것을 발견했다.

일반 JSF를 사용하는 경우이 아닌 이 존재합니다. <f:ajax>입니다. 내 접근 방식은<f:ajax>과 작동하지 않습니다. <f:ajax>를 사용

다른 헤더가 :

Faces-Request:partial/ajax 

OSW에 의해 제안 된이 솔루션은 <f:ajax><p:ajax> 작동 :

PartialViewContext#isAjaxRequest()

답변

14

내가 HTTP 헤더에 의존하지 않을 것입니다. 절대로 자신에 의해 그것을 시도,하지만 당신은 다음 작업을 수행 할 수 있습니다 : 또 다른 옵션이 대신 답변을 isAjaxRequest()

+0

답변 해 주셔서 감사합니다. 좋은 소리. 이 방법이 무엇인지 아십니까? 어쩌면 헤더 만 검사 할 수도 있습니다. –

+0

@Matt, 죄송합니다. 정확하게 무엇을하는지 모르지만 옵션은 헤더를 확인하거나 요청 매개 변수 맵을 확인 중입니다. – Osw

+0

내 질문이 업데이트되었습니다. 내 솔루션이 안전하지 않은 것 같습니다. –

1
나는 그것이 신뢰할 수있는 방법이라고 거라고

그것을 확인하십시오. 이것은 예를 들어, 장고 AJAX 요청을 확인하는 방법을 정확히 : 또한 같은 여기에 나열된

def is_ajax(self): 
     return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' 

: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

+0

감사의 isPartialRequest()을 사용

PartialViewContext pvc = facesContext.getPartialViewContext(); if(pvc.isAjaxRequest()) { // ... } else { // ... } 

. 내 질문이 업데이트되었습니다. 내 솔루션이 안전하지 않은 것처럼 보입니다. –

관련 문제