2016-05-25 7 views
1

インターセプタの検証とコントローラの検証をSpringと組み合わせる方法については、ページにすべてのエラー(インターセプタとコントローラから来たもの)を表示できるようにする必要があります。Spring MVCでインターセプタの検証とコントローラの検証を結合する

私の現在のシナリオ: インターセプタフェッチエラーが発生すると、彼は現在のページにリダイレクトし、コントローラには行かずにエラーを表示します。

他の検証を行うにはコントローラにも行く必要があります。私はユーザがページ内のすべてのエラーを知る必要があるため、存在すれば私の傍受エラーを受け取ります。

インターセプタからコントローラに属性を渡すことはできますか、それとも解決策ですか?

答えて

0

私は要求属性を介してコントローラにインターセプタから検証エラーを渡します

public class FooInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 

     request.setAttribute("interceptorValidationErrors", "a list of validation errors"); 

     return super.preHandle(request, response, handler); 
    } 
} 

そして、このようなコントローラでそれらを読んで:

@Controller 
public class FooController { 

    @RequestMapping("/foo") 
    String get(HttpServletRequest request) { 

     List<ObjectError> interceptorErrors = (List<ObjectError>) request.getAttribute("interceptorValidationErrors"); 

     return "someViewName"; 
    } 
} 
+0

時に試して私にnullポインタ例外を与えます(request.getAttribute( "interceptorValidationErrors")によってコントローラ内の属性にアクセスするために、要求オブジェクトは満たされていますが、interceptorValidationErrors属性はありません。 –

+0

@MohammedMostafaは実際に呼び出されるインターセプタですか? g –

+0

あなたは正しく呼ばれていますが、request.setattributeに到達できませんでした。インターセプタをHandlerInterceptorAdapterから継承してHandlerInterceptorを実装するように変更したとき、うまくいきました。 –

関連する問題