2012-02-15 110 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> 

,并在我的豆子的一个硬编码重定向规则。

相关问题