Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 当没有要显示的错误时,从错误页面重定向_Jsf_Seam2 - Fatal编程技术网

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

Jsf 当没有要显示的错误时,从错误页面重定向,jsf,seam2,Jsf,Seam2,如果没有要显示的错误消息,我希望seam应用程序的错误页面重定向到主页(例如,如果用户将错误页面标记为书签) 我在pages.xml中有许多规则,它们指向如下错误页面: <!-- pages.xml --> <exception class="org.jboss.seam.framework.EntityNotFoundException" log-level="warn"> <redirect view-id="/error.xhtml">

如果没有要显示的错误消息,我希望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>
当我手动生成错误时,会调用上面的方法,但这会重定向到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
  • seam 2中是否有允许我检查是否有任何消息的类
  • 是否有一个EL表达式可以在没有额外bean的情况下执行此检查

  • 根据目前为止的研究,我可以推断,这里的问题是seam如何将FacesMessages从一个JSF上下文转发到另一个JSF上下文。实际上,在应用pages.xml规则时,这些消息似乎已被删除到其他seam组件,然后在呈现页面时返回。目前,我已通过显示“无错误”消息解决了此问题(请注意,在页面呈现期间会显示全局消息):

    
    #{messages['jsf.NoErrors']}
    

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

    我相信我正在使用JBoss(EWP5.1.2)提供的JSF1.1
    //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
    
    <h:outputText id="noErrorsMessage"
        rendered="#{empty org.jboss.seam.international.statusMessages.currentGlobalMessages}">
        #{messages['jsf.NoErrors']}
    </h:outputText>