2014-01-31 8 views
1

일부 검사를 수행하는 필터가 있으며 해당 검사 실패를 기반으로 false를 반환합니다. 그러나 오류를 반환하기 전에 오류가 발생할 경우 사용자에게 표시해야하는 오류보기를 렌더링합니다. 그 대신 빈 페이지가 404 오류 코드와 함께 표시됩니다. url에는 컨트롤러와 동작이 포함되어 있지 않으므로 일반적으로 404가 적합하지만 여기에서 전역 필터를 적용하여 렌더링 호출을 수행합니다. 렌더링되지 않은 렌더링 호출에 대해 걱정했습니다.필터가 false를 반환하면 뷰 호출 렌더링은 어떻게됩니까?

답변

0

코드를 공유 할 수 있습니까?

존재하지 않는 것을 렌더링하려고합니다.

다음 코드 나

def filters = { 
     before = { Map model -> 
       ... 
       render (view: '/access-denied') 
       return false 

    } 

작동하고 보통 나는 케이스의이 종류의보기를 렌더링하고 있지 않다, 대신 나는

를 다음처럼 뭔가를 리디렉션하고 액세스 denied.gsp 또한

를 렌더링

  before = { Map model -> 
       ... 
       redirect(uri: '/access-denied') 
       return false 
      } 
+0

요구 사항에 따라 새 위치로 리디렉션 할 수 없습니다. 다음은 귀하의 사례와 다른 몇 가지 사항입니다. 첫째, 필터는 기본 컨트롤러를 확장합니다. 여기, filter는 render 호출을하는 컨트롤러의 메소드를 호출한다. 둘째,이 컨트롤러는이 필터가있는 주요 grails 프로젝트에 추가되는 다른 플러그인 프로젝트에 있습니다. 자,보기 파일은 그 플러그인 프로젝트에 존재하지만 나는 그곳에서 파일을 볼 수있는 많은 렌더링 호출을하고 있으며 모든 문제가 있어야한다고 생각하지 않는다. – Sumit

+0

'filter extends base controller'란 무엇을 의미하는지 이해할 수 없습니다. 필터 코드를 공유 할 수 있습니까? { {= 전 경우 { doResponse (소유자, 요청, 응답 (초기화는()!) –

+0

'클래스 MainFilters는 BaseController { 데프 필터 = { 모든 ('*': '*', 액션 컨트롤러) 확장 PARAMS) } 반환 사실 } 후 = {지도 모델을 false를 반환 - "모델 호출 후"> 에 println + model.inspect() } } } 부울 doResponse (웹 필터, 요청, 응답, 매개 변수) { webFilter.render (보기 : "/ error/e rlink ") false를 반환 } } – Sumit

0

필터를 사용하여 전달보기를 렌더링 할 수 있습니다. 예 :

all(controller:'*', action:'*') { 
    before = { 
     if(requirePost && !"post".equalsIgnoreCase(request.method)) { 
      response.status = 405 
      response.setHeader('Access','POST'); 
      forward(controller: 'page', action: 'http405') 
      return false; 
     } 
    } 
} 

이렇게하면 URL이 변경되지 않습니다.

관련 문제