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