2012-02-15 97 views
0

如果沒有顯示錯誤消息(例如,如果用戶書籤錯誤頁面),我希望我的seam應用程序的錯誤頁面重定向到主頁面。當沒有錯誤顯示時從錯誤頁面重定向

我有一些在pages.xml規則引向一個錯誤頁面是這樣的:

<!-- 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> 

嘗試一些不成功的EL表達式來嘗試檢查沒有消息後,我增加了一個輔助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"; 
    } 

上述方法被調用時我手動產生錯誤,但這種重定向到家顯示錯誤消息那裏。日誌消息報告,似乎我使用的類不具有正在顯示的消息的任何知名度:

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類,讓我檢查有什麼消息?
  2. 是否有一個EL表達式可以在沒有額外的bean的情況下執行此檢查?
+0

JSF 1.x or 2.x? – BalusC 2012-02-15 12:37:20

+0

我相信我正在使用JBoss提供的JSF 1.1(EWP 5.1.2) – 2012-02-16 02:16:46

回答

0

,盡我所能與我的調查至今推斷,這裏的問題是把從一個JSF背景下如何縫FacesMessages到另一個。實際上,消息似乎已經被移除到其他seam組件,同時正在應用pages.xml規則,然後在頁面呈現時返回。我已經解決這個問題,現在呈現出「沒有錯誤」消息工作了(注意,全球消息頁面渲染過程中存在):

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

,並在我的豆子的一個硬編碼重定向規則。

相關問題