Finally figured out the answer...
When an incoming request is a page request, redirect to login is also considered as a page request.. Hence the response is rendered on the screen...
But, when the incoming request is an ajax request, redirect to login is treated as an ajax request...
So, to render this response...
//Global.java
@Override
public Action onRequest(Http.Request request, Method method) {
System.out.println(request.path());
return new Action.Simple() {
public Result call(Http.Context ctx) throws Throwable {
String lastActionTime = ctx.session().get("lastActionTime");
if (lastActionTime != null && sessionExpired(Long.valueOf(lastActionTime))) {
ctx.session().clear();
flash("success", "Session expired");
return temporaryRedirect("/login");
}
return delegate.call(ctx);
}
};
}
private boolean sessionExpired(Long lastActionTime) {
maxSessionTime = Integer.parseInt(Play.application().configuration().getString("maxSessionTime"));
return ((System.currentTimeMillis() - lastActionTime) / MILLISECONDS_IN_A_MINUTE) >= maxSessionTime;
}
In the client side,
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown) {
document.open();
document.write(XMLHttpRequest.responseText);
document.close();
}
});
Thanks Avik & Mantithetical... But is there any other better way to achieve the same?