Define the timeout period in web.xml :
 
<session-timeout>60</session-timeout>
</session-config>
Create a class which extend the AjaxselfUpdatingTimerBehavior and implements IAjaxIndicatorAware :
  
  
  
  
       
       
  
       
                   
                   
       
 
 
<session-config>
<session-timeout>60</session-timeout>
</session-config>
Create a class which extend the AjaxselfUpdatingTimerBehavior and implements IAjaxIndicatorAware :
import
org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import
org.apache.wicket.ajax.IAjaxIndicatorAware;
import
org.apache.wicket.util.time.Duration;
public class TimerBehavior extends
AjaxSelfUpdatingTimerBehavior implements
IAjaxIndicatorAware{
      public
TimerBehavior(Duration updateInterval) {
            super(updateInterval);
      }
      private static final long serialVersionUID = 1L;
      @Override
      public String
getAjaxIndicatorMarkupId() {
            return null;
      }
}
Create a panel which ill show the confirmation popup to decide whether to continue with current session or close :
import
org.apache.wicket.ajax.AjaxRequestTarget;
import
org.apache.wicket.ajax.markup.html.AjaxLink;
import
org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import
org.apache.wicket.markup.html.panel.Panel;
public class
SessionTimeOutPanel extends Panel{
      /**
       * 
       */
      private static final long serialVersionUID = 1L;
      private boolean status;
      public boolean isStatus() {
            return status;
      }
      public void setStatus(boolean status) {
            this.status = status;
      }
      public SessionTimeOutPanel(String
id,final ModalWindow modalWindow) {
            super(id);
            status = false;               
            AjaxLink
okLink = new AjaxLink("OkButton") {
                  @Override
                  public void
onClick(AjaxRequestTarget target) {
                        setStatus(true);
                        modalWindow.close(target);
                  }
            };
            AjaxLink
cancelLink = new AjaxLink("CancelButton") {
                  @Override
                  public void
onClick(AjaxRequestTarget target) {
                        setStatus(false);
                        modalWindow.close(target);
                  }
            };
            add(okLink);
           add(cancelLink);
      }
}
 HTML page for the above panel:
<wicket:panel>
      <span class=""
style="width:99%;background: #4286c5 !important;">Session Time Out</span>
      <div class="">
            <label class=""
style="width:100%">Your session is about
to expire.Do you wish to continue?</label><br />
      </div><br/>
      <div id=""
style="width:100%  padding:1.3em 0em;padding-top:32%
height:2.3em; ">
<a   class=""   href="#"
tabindex=""
style="margin-right: 3%;margin-left:35%"  wicket:id="OkButton"> <span>Ok</span>
</a>
<a   class=""   href="#"
tabindex=""
style="margin-right: 2%;" wicket:id="CancelButton"><span >Cancel</span>
</a> 
      </div>
</wicket:panel>
Create a abstract web page ,all pages should implement this abstractpage: 
  
  
       
       
       
       
         
            
              
                   
  
  
       
       
       
  
  
  
                   
           
  
  
             
In Html Page add the below lines :
<div wicket:id="sessionTimeout"></div>
 
import org.apache.wicket.Request;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.ajax.AjaxRequestTarget;
import
org.apache.wicket.ajax.IAjaxIndicatorAware;
import
org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import
org.apache.wicket.markup.html.WebMarkupContainer;
import
org.apache.wicket.markup.html.WebPage;
import
org.apache.wicket.protocol.http.PageExpiredException;
import org.apache.wicket.protocol.http.WebRequest;
import
org.apache.wicket.util.time.Duration;
public abstract class AbstractPage
extends WebPage implements
IAjaxIndicatorAware {
      protected ModalWindow sessionTimeOutModalWindow;
      private transient HttpSession httpSession;
      private  int timeOut=0;
      private int timOutCount=0;
      public ModalWindow
getSessionTimeOutModalWindow() {
            sessionTimeOutModalWindow = new ModalWindow("sessionTimeout");
        final
SessionTimeOutPanel sessionTimeOutPanel = new
SessionTimeOutPanel(
                  sessionTimeOutModalWindow.getContentId(),
                  sessionTimeOutModalWindow);
        sessionTimeOutPanel.setOutputMarkupId(true);
        sessionTimeOutModalWindow.setContent(sessionTimeOutPanel);
        sessionTimeOutModalWindow.setInitialHeight(135);
        sessionTimeOutModalWindow.setInitialWidth(400);
        sessionTimeOutModalWindow.setResizable(false);
        sessionTimeOutModalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback()
{                        
            public void
onClose(AjaxRequestTarget target) {  
          if
(sessionTimeOutPanel.isStatus()) {
              if(httpSession!=null){
              httpSession.setMaxInactiveInterval(timeOut);
              timOutCount=timeOut;
              }else{
                   throw new
PageExpiredException("PageExpiredException");
                    }
          }
          else
          {
            target.prependJavascript("window.opener='X';window.open('','_parent','');" +
                        "window.close();"); 
          }
            }});
        Request request = RequestCycle.get().getRequest();
        if( request instanceof WebRequest )
        {
            WebRequest wr =
(WebRequest)request;
            httpSession =
wr.getHttpServletRequest().getSession();
            if( httpSession != null ) {
                timeOut=httpSession.getMaxInactiveInterval();
            }
        }
        return sessionTimeOutModalWindow;
    }
      /**
       * constructor
       */
      public AbstractPage()
{
          add(getSessionTimeOutModalWindow());
          final
WebMarkupContainer timer=new WebMarkupContainer("timer");
        timer.setOutputMarkupPlaceholderTag(true);
        timer.add(new
TimerBehavior(Duration.ONE_SECOND){
                /**
                   * 
                   */
                  private static final long serialVersionUID = 1L;
                        @Override
                protected void
onPostProcessTarget(AjaxRequestTarget target) {
                    timOutCount--;
                    if(timOutCount==60){
                      sessionTimeOutModalWindow.show(target);
                     //
target.addComponent(sessionTimeOutModalWindow);
                    }
                }
        }); 
      add(timer);
      }
@Override
    public String
getAjaxIndicatorMarkupId() {
            timOutCount=timeOut;
            return null;
    }
In Html Page add the below lines :
<div wicket:id="sessionTimeout"></div>
<div wicket:id="timer"></div> 
No comments:
Post a Comment