如果没有要显示的错误消息(例如,如果用户为错误页面添加书签),我希望我的 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
- 接缝 2 中是否有一个类可以让我检查是否有任何消息?
- 是否有一个 EL 表达式可以在没有额外 bean 的情况下执行此检查?