Параметр verifyDialog commandButton не перенаправляет / ничего не делает, если вы ожидаете более продолжительный период времени / простой сеанса - PullRequest
0 голосов
/ 23 марта 2020

У меня есть страница JSF, на которой появляется всплывающее окно, если он простаивает в течение некоторого периода времени. 3 мин 10 мин и т. Д. Если он простаивает в течение некоторого периода времени, появляется окно подтверждения с сообщением «Ваш сеанс истек». и командная кнопка id = "quitConfirm" OK

После нажатия идентификатора кнопки он перенаправляет на домашнюю страницу или на какой-либо путь, который вы упомянули

Чтобы проверить это, я развернул это в своих локальных веблогах c на сервере и после 4-минутного ожидания или около того щелкнул по кнопке «ОК», он перенаправился, как и ожидалось.

Ошибка -

после времени ожидания 1 Час или около того нажал на кнопку «Кнопка», ничего не сделал
Он не перенаправляет / ничего не делает.

Ничего не изменилось в коде, просто пришлось ждать в течение 30 минут или часа.

Фактическая функция

Она должна перенаправлять даже после более длительного периода времени. Я имею в виду, что всплывающее диалоговое окно может появиться через 3 минуты, но если щелкнуть по нему примерно через час, оно должно быть перенаправлено.

Воспроизводимый код -

<ui:composition  xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

   <h:panelGrid>
          <p:column>   
              <h:outputText id="bankwithdrawid"  />
                 <h:form  prependId="false">
                        <h:commandButton value="Expired" id="submit" type="submit" title="Click here to Restart" action="#{expiredMB.logout}"/>
                        <p:idleMonitor timeout="9000">
                            <p:ajax event="idle" onstart="PF('sessionTimout').show()"  />
                        </p:idleMonitor> 
                        <p:confirmDialog showEffect="fade" hideEffect="explode"
                                message="Your session has expired."
                                header="Session Timeout " widgetVar="sessionTimout" appendTo="@(body)">
                            <p:commandButton id="quitConfirm" value="OK" action="#{expiredMB.logout}" process="@this" onclick="PF('sessionTimout').hide()" />
                        </p:confirmDialog>
                </h:form>

          </p:column>
   </h:panelGrid>

 </ui:composition>   

Java bean ExpiredMB

public class ExpiredMB {

private static final Logger logger = LoggerFactory
        .getLogger(ExpiredMB.class);

public void logout() {
    ExternalContext ectx = FacesContext.getCurrentInstance()
            .getExternalContext();
    ectx.getSessionMap().clear();
    ectx.invalidateSession();
    try {
        ectx.redirect("/security/home.do?submit=Log In");
    } catch (IOException e) {
        logger.error("Problem with login." + e.getMessage());
    }
}

}
...