当没有要显示的错误时,从错误页面重定向

时间:2012-02-15 07:35:57

标签: jsf seam2

如果没有要显示的错误消息(例如,如果用户为错误页面添加书签),我希望我的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";
   }

当我手动生成错误时会调用上面的方法,但是这会重定向到home 并且会在那里显示错误消息。日志消息报告我正在使用的类似乎没有显示正在显示的消息的可见性:

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的情况下进行此检查?

1 个答案:

答案 0 :(得分:0)

到目前为止,我可以通过我的调查得出最佳结果,这里的问题是如何将FacesMessages从一个JSF上下文转发到另一个JSF上下文。实际上,当应用pages.xml规则时,消息似乎已被删除到某个其他seam组件,然后在页面呈现时返回。我现在通过显示“无错误”消息解决了这个问题(注意在页面呈现期间存在全局消息):

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

并在我的一个bean中使用了一些硬编码的重定向规则。