2012-02-15 11 views
0

表示するエラーメッセージがない場合(ユーザがエラーページをブックマークした場合など)、seamアプリケーションのエラーページをホームページにリダイレクトします。表示するエラーがない場合にエラーページからリダイレクト

私はこのようなエラーページへの直接pages.xmlでルールの数があります:なしメッセージをチェックしようとするいくつかの失敗したEL式を試した後

<!-- pages.xml --> 
    <exception class="org.jboss.seam.framework.EntityNotFoundException" 
    log-level="warn"> 
    <redirect view-id="/error.xhtml"> 
     <message severity="warn">#{messages['jsf.RecordNotFound']}</message> 
    </redirect> 
    </exception> 

を、私はにバッキングBeanを追加しましたチェックを行う:

<!-- pages.xml --> 
    <page view-id="/error.xhtml"> 
    <action execute="#{facesMessagesUtil.getGlobalMessagesCount()}" /> 
    <navigation> 
     <rule if-outcome="none"> 
     <redirect view-id="/home.xhtml"/> 
     </rule> 
    </navigation> 
    </page> 

//FacesMessagesUtil.java 

    import javax.faces.context.FacesContext; 
    import org.jboss.seam.faces.FacesMessages; 

    ... 

    public String getGlobalMessagesCount() 
    { 
     log.info("currently {0} global facesMessages (seam)", FacesMessages.instance().getCurrentGlobalMessages().size()); 
     log.info("found messages in faces context: {0}", FacesContext.getCurrentInstance().getMessages().hasNext()); 
     log.info("got maximum severity: {0}", FacesContext.getCurrentInstance().getMaximumSeverity()); 

     if (!FacesContext.getCurrentInstance().getMessages().hasNext()) 
     { 
     return "none"; 
     } 
     return "some"; 
    } 

上記方法は、私が手動でエラーが発生したときに呼び出さ、これは家庭にリダイレクトし、がエラーメッセージを示しています。私はかどうかを確認することができます継ぎ目2内のクラスがあります

16:41:41,908 INFO [FacesMessagesUtil] currently 0 global facesMessages (seam) 
16:41:41,908 INFO [FacesMessagesUtil] found messages in faces context: false 
16:41:41,908 INFO [FacesMessagesUtil] got maximum severity: null 
  1. :ログメッセージは、私が使用しているクラスが表示されているメッセージのいずれかの可視性を持っていないようだと報告していますメッセージはありますか?
  2. 追加のBeanなしでこのチェックを実行できるEL式はありますか?
+0

JSF 1.xまたは2.x? – BalusC

+0

私はJSF 1.1(JBoss(EWP 5.1.2)提供)で作業していると思いますが、 –

答えて

0

これまでの調査で推測できることは、Seamが1つのJSFコンテキストから別のJSFコンテキストにFacesMessagesを転送する方法です。基本的には、pages.xmlルールが適用されている間にメッセージが他のseamコンポーネントに取り除かれたように見え、ページがレンダリングされるまでに返されます。

<h:outputText id="noErrorsMessage" 
    rendered="#{empty org.jboss.seam.international.statusMessages.currentGlobalMessages}"> 
    #{messages['jsf.NoErrors']} 
</h:outputText> 

と私の豆のいずれかで、いくつかのハードコーディングされたリダイレクトルール:私は「エラーなし」というメッセージが(グローバルメッセージをレンダリングするページの間に存在していることに注意してください)を示すことによって、今のところ、この問題を回避してきました。

関連する問題