2014-04-21 2 views
0

드롭 다운에서 일부 매개 변수를 검색하고 다른 페이지에 검색 결과를 표시하는 사용자 정의 검색 구성 요소가 있습니다. 나는 현재 구성 요소가 요청 PARAMS를 픽업하고 검색을 처리, 결과 페이지에서 기본 (GET) 형태를양식을 CQ5의 페이지에 게시

<form id="searchForm" action="/content/myWeb/searchResult.html" method="get" target="_blank"> 

를 사용합니다.

검색 매개 변수가 URL에 표시되지 않도록 POST 제출을해야합니다. 나는 위의 형태로 그것을 method="Post"을하지만,이 오류가 발생합니다 :

Status 
500 
Message  
javax.jcr.nodetype.ConstraintViolationException: no matching property definition found for {}myParam 
Location /content/myWeb/searchResult 
Parent Location  /content/myWeb 
Path  
/path/to/search/page 

답변

4

그 예외가 슬링은 서블릿이 POST를 시도 할 것은 찾을 수 없음을 설명하는 부수적 인 방법입니다. 이 경우, SlingDefaultPostServlet은 SlingDefaultPostServlet을 기본으로합니다.이 SlingDefaultPostServlet은 노드/content/myWeb/searchResult에 속성 (POST 값으로 표현됨)을 POST하려고 시도합니다. 슬링이 "귀하의 요청에 등록 된 서블릿을 찾을 수 없습니다"라고 말할 방법이 없기 때문에 기본 동작으로 되돌아갑니다.

저는/content/myWeb/searchResult가 cq : Page 노드 유형이라고 가정합니다. 노드 유형은 매우 제한적이어서 양식 값에 해당하는 특성을 추가 할 수 없다는 것을 알려줍니다.

/content/myWeb/searchResult.html에 대한 GET 요청이 해석 및 실행될 수 있었기 때문에 이전에 작동했습니다. 페이지 노드에 대한 모든 GET 요청은 본질적으로 시스템에 의해 처리 될 수 있습니다.

이제 POST를 수행하려고하므로이 POST 요청을 처리 할 수있는 새 서블릿을 작성하고 등록해야합니다. 이렇게하려면 SlingPostServlet을 만들어 특정 경로 (권장하지 않음) 또는 특정 선택자/확장자 조합 (권장)에 등록해야합니다. 이 서블릿은 요청 매개 변수를 처리하고 HTML 문서로 응답해야합니다.

주의 ... 난 그냥 당신이 기술적으로 당신이 무엇을 요구 구축 할 수 있도록 도와드립니다 설명 무엇

. 즉, 요청 매개 변수를 숨기기 위해 POST를해야한다는 전제에 동의하지 않습니다. 이 작업이 너무 많은 이유는 슬링이 이론적으로 지원하도록 만들어진 REST의 원칙을 우회하기 때문입니다. 요청 경로 및 매개 변수를 통한 URL은 "param1 = x, param2 = y 등의 기준이 주어지면"/ content/myWeb/searchResult 페이지를 원합니다. 요청 매개 변수가있는 GET은 적절한 RESTful 요청입니다.

내가하려는 일에 대해 다시 생각해 보시기 바랍니다. RESTful 원칙을 중심으로보다 복잡한 솔루션을 구축하는 것은 좋은 습관이 아닙니다.

+0

입력에 감사드립니다. 많은 의미가 있습니다. 나는 하루 이상을 찾고 있었다.SlingPostServlet을 사용할 때의 예를 들려 줄 수 있습니까? –

1

sidenote와 마찬가지로 지정된 URL이 슬링 서블릿 확인자를 통해 서블릿에 바인딩되었는지 항상 확인할 수 있습니다.

http://localhost:4502/system/console/servletresolver 

서블릿이 지정된 URL로 등록되어있는 경우에 폐쇄를 찾아이 할 수있는 최소한의 도움 다음 OSGI-콘솔을 통해 또는 URL을 통해 연결 가능.

0

POST 요청을 처리 할 수있는 페이지에 대한 POST.jsp를 작성할 수 있습니다.

POST와 같은 요청을하는 것은 안심이지만 때로는 유용 할 수 있습니다. 또한 POST를 사용하면 운영자가 요청을 캐시하지 않습니다.

+1

캐싱 중일 때, 발송자는 쿼리 매개 변수가있는 'GET'요청을 캐시하지 않습니다. – anotherdave

+0

예, 쿼리 매개 변수는 캐싱을 제거합니다. – nerd