一段时间后或按条件从JSP重定向到另一个JSP



我是一个新手。我需要以下行为。我有一排注册用户。排在队列前头的用户可以访问页面A 10分钟,10分钟后,他应该被重定向到另一个页面B,并从队列中删除。如果该用户登出/关闭浏览器,他也应该从队列中删除。

如果用户在页面A停留10分钟,我无法重定向到页面B。

我正在尝试使异步计时器使重定向到B:

在页A:

<h:body>
    #{CheckBean.runTimer()}
...

这是CheckBean:

public class CheckBean {
    @EJB
    ActiveUserTimer timer;
    ...
    public void runTimer() {
        FacesContext context = FacesContext.getCurrentInstance();
        ExternalContext externalContext = context.getExternalContext();
        timer.run(externalContext, System.currentTimeMillis());
        ...
EJB定时器:

@Stateless
public class ActiveUserTimer{
    @Asynchronous
    public void run (ExternalContext externalContext, long time) {
        while (true) {
            if (System.currentTimeMillis() - time > 10000 || someFuncDetectedUserIsOffline()) {
                externalContext.redirect("../public/index.xhtml");
                Thread.sleep(1000);
            }
        }
    }

问题是当我传递externalContext来运行()方法externalContext不是null,而是externalContext。requestParameterMap值为:

目标虚拟机异常:
java.lang.NullPointerException:com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest.getFormHintFieldEncoding (PwcCoyoteRequest.java: 225)com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest.setRequestEncodingFromSunWebXml (PwcCoyoteRequest.java: 188)com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest.getCharacterEncoding (PwcCoyoteRequest.java: 129)org.apache.catalina.connector.Request.parseRequestParameters (Request.java: 3114)org.apache.catalina.connector.Request.getParameterNames (Request.java: 1282)org.apache.catalina.connector.RequestFacade.getParameterNames (RequestFacade.java: 438)com.sun.faces.context.RequestParameterMap.getEntryIterator (RequestParameterMap.java: 126)com.sun.faces.context.BaseContextMap EntrySet.iterator美元(BaseContextMap.java: 166)com.sun.faces.context.BaseContextMap BaseSet.size美元(BaseContextMap.java: 154)java.util.Collections UnmodifiableCollection.size美元(Collections.java: 996)java.util.AbstractMap.size (AbstractMap.java: 67)java.util.Collections UnmodifiableMap.size美元(Collections.java: 1276)在com.mycompany.hib.ActiveUserTimer.run (ActiveUserTimer.java: 29)在sun.reflect.NativeMethodAccessorImpl。invoke0(本地方法)sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 39)sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 25)java.lang.reflect.Method.invoke (Method.java: 597)org.glassfish.ejb.security.application.EJBSecurityManager.runMethod (EJBSecurityManager.java: 1052)org.glassfish.ejb.security.application.EJBSecurityManager.invoke (EJBSecurityManager.java: 1124)…

我看了石英,但我想我已经得到了确切的问题,如果我将通过externalContext实例。还有别的办法吗?

这个任务根本不需要任何服务器计时器。您可以使用纯JavaScript来实现它。检查setTimeout功能,以解决您的问题。

知道了这一点,你可以做类似的事情

<script type="text/javascript">
    setTimeout(function() { 
        document.getElementById('myForm:btnContinue').submit();
        }, 10*1000*60);
</script>
<h:form id="myForm">
    <!-- page content... -->
    <h:commandButton id="btnContinue" value="Continue" action="#{bean.continue}" />
</h:form>

相关内容

  • 没有找到相关文章

最新更新