2012-02-15 2 views
0

Я хочу, чтобы моя страница ошибки моего приложения шва перенаправлялась на домашнюю страницу, если на экране нет сообщения об ошибке (например, если пользователь закладок страницы с ошибкой).Переадресация с страницы с ошибкой при отсутствии ошибок для отображения

У меня есть ряд правил в 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 попытаться проверить какие-либо сообщений, я добавил подкладочный боб в выполните проверку:

<!-- 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, которое может выполнить эту проверку без дополнительного компонента?
+0

JSF 1.x или 2.x? – BalusC

+0

Я считаю, что работаю с JSF 1.1, предоставленным JBoss (EWP 5.1.2) –

ответ

0

Насколько я могу судить по моим исследованиям до сих пор, проблема здесь в том, как шов пересылает FacesMessages из одного контекста JSF в другой. По сути, сообщения, похоже, были удалены на какой-либо другой компонент шва, в то время как применяются правила pages.xml, а затем возвращаются к тому времени, когда страница отображается. Я работал вокруг этого вопроса сейчас, показывая сообщение «без ошибок» (обратите внимание, что глобальные сообщения присутствуют во время страницы визуализации):

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

и с некоторыми жестко прописанными правилами переадресации в одном из моих бобов.