Я занимаюсь разработкой веб-сайта с JSF 2.0, спящими и первичными. На самом деле я реализую панель администратора, где администратор сайта может помещать все приложение в «режим обслуживания». Это делается путем изменения флага на компоненте, включенном в приложение (называемый целевым «AppConfigurationBean»). Если флаг активен, пользователь обязательно возвращается на страницу под названием «maintenance.xhtml» с помощью условного правила навигации, объявленного в faces-config.xml. Пользователь может обойти страницу обслуживания, вставив специальный ключ обхода, который может быть редко задан администратором. Если он это делает, флаг активируется на специальном компоненте, который содержит информацию о пользователе и называется «CurrentClientSessionBean». Правило навигации работает, если значение, возвращаемое специальным методом в CurrentClientSessionBean, которое учитывает флаг режима обслуживания на компоненте приложения и флажок «имеет байпасный ключ» на себе.Условная навигация не работает должным образом в JSF
здесь является правилом навигации по граням-config.xml:
<navigation-rule>
<description>System</description>
<from-view-id>*</from-view-id>
<navigation-case>
<display-name>Maintenance Mode</display-name>
<from-outcome>*</from-outcome>
<if>#{currentClientSessionBean.toReturnToMaintenance}</if>
<to-view-id>/maintenance.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
вот maintenance.xhtml страница
<ui:composition id="maintenance" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:plm="http://java.sun.com/jsf/composite/plmCustomComponents">
<f:verbatim><!DOCTYPE html></f:verbatim>
<html>
<h:head>
<title>#{msg.applicationTitle}</title>
<meta charset="UTF-8"></meta>
<meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
<h:outputStylesheet library="default" name="css/normalize.css" />
<h:outputStylesheet library="default" name="css/icons.css" />
<h:outputStylesheet library="default" name="css/main.css" />
</h:head>
<f:metadata>
<ui:include src="metadata/browserViewParams.xhtml" />
</f:metadata>
<h:body>
<div id="legalPart">
<ui:insert name="legalPart">
<ui:include src="/structure/legalPart.xhtml" />
</ui:insert>
</div>
<p:panel>
<h1>
<h:outputText value="#{msg.maintenancePageTitle}" />
</h1>
<p>
<h:outputText value="#{msg.maintenancePageBodyMsg}" />
</p>
<h:form>
<p:outputLabel for="bypassKeyInput"
value="#{msg.maintenancePageInsertBypassKeyLabel}" />
<br />
<p:inputText id="bypassKeyInput"
value="#{maintenanceBacking.keyBuffer}" required="true" />
<br />
<p:message for="bypassKeyInput" />
<p:commandButton value="#{msg.checkPassword}"
action="#{maintenanceBacking.checkBypassKey}" ajax="false" />
</h:form>
</p:panel>
<ui:debug />
</h:body>
</html>
</ui:composition>
содержание Подложка очень просто, он просто проверяет, если bypasskey соответствует истинному и делает простую навигацию на домашней странице, если это правда.
Теперь CurrentClientSessionBean метод условной навигации это одна:
/**
* Special getter that determines if user should return to maintenance
*
* @return
*/
public boolean isToReturnToMaintenance(){
try{
AppConfigurationBean appConfigurationBean = JSFAppUtils.findApplicationBean("appConfigurationBean");
boolean result = ((!this.hasBypassKey) && appConfigurationBean.isMaintenanceModeOn());
return result;
}catch(NotFoundException e){
logger.error("NotFoundException thrown in isToReturnToMaintenance method", e);
throw new RuntimeException("NotFoundException thrown in isToReturnToMaintenance method", e);
}
}
Вот главная проблема: по какой-то причине, когда режим обслуживания активен пользователь вынужден вернуться к обслуживанию даже если он вставляет правильный ключ обхода на вход.
Кроме того: Там должно быть что-то действительно неправильно в моем приложении, потому что я попытался прокомментировать условное правило навигации, что означает, что содержание страницы должны быть недоступны и изменения в режиме технического обслуживания не должны иметь никакого влияния на применение, но все же система режима обслуживания продолжала работать с тем же отношением, которое я описал.
Пожалуйста, помогите мне, извините, если я не был достаточно ясен. Спросите меня о том, что вы не поняли о коде.
Еще никто не ответил? Ну, по крайней мере, пожалуйста, покажите мне, как отлаживать фазу навигации в жизненном цикле JSF – Katuiros