0

インターセプターで@aroundInvokeを使用しようとしていますが、validationXをチェックしてメソッドの実行を続行するか、ユーザーを特定のJSFページにリダイレクトします。

@AroundInvoke
public Object myInterceptor(InvocationContext invocation) throws Exception {
        if(validationX){//it passes the validation so proceed
            return invocation.proceed();    
        }else{//it doesnt passes the validation so go to 
            //DO SOMETHING TO REDIRECT TO SPECIFIC JSF
        }

    }

私はもう試した:

  • 「JSF?faces-redirect = true」で文字列を返す-----エラー(文字列をメソッドが返す必要のあるものに変換)を取得します。
  • FacesContext.getCurrentInstance()。getExternalContext()。dispatch( "/ JSF.jsf"); -----getCurrentInstanceメソッドでnullPointerExceptionが発生します。
  • FacesContext.getCurrentInstance()。getExternalContext()。redirect( "/ JSF.jsf"); -------同じNullPointerException。
    • HttpServletRequestとHttpServletResponseを使用して応答を生成しますが、NullPointerExceptionが発生します。

前もって感謝します!

4

1 に答える 1

3

JavaEEインターセプターはそのためのものではありません。これは、現在のCDI / EJB Beanメソッドの呼び出しを続行するかどうかを決定するため(および必要に応じて例外をスローして中止する場合)、および/またはその戻り値を制御/操作するために使用されることを目的としています。JSFコントローラーとして機能することは意図されていません。そのためには、代わりに通常のJSFマネージドBeanを使用する必要があります。

または、これが例外的な状況に関係する場合は、特定の例外をスローして、その例外タイプに<error-page>登録する必要があります。web.xml特定のメソッド呼び出しではなく特定のURLをフックできる場合、別の方法は、代わりに単純なサーブレットフィルターでジョブを実行することです。

これが正しい解決策であると誤って考えた具体的な機能要件は質問から明らかではないため、より詳細な回答を与えることはできません。

于 2013-03-21T18:26:51.057 に答える