JSP Loading Page... Please wait while my code doesn't work!

N

Nino

Hi.

I have tried, and tried again to build a "Please wait..." loading page
in JSP. I have read all the posts I could find on the matter and
incorporated what seemed to be a set way to do this.

Here is the premise that just about every bit of information I
gathered suggested:
In the HEAD tag:
<STYLE>
#waitPage { position: absolute; }
#loadPage { position: absolute; visibility: hidden; }
</STYLE>

<SCRIPT language="JavaScript">
function initWait () {
if (document.layers) {
document.layers['waitPage'].visibility = 'hide';
document.layers['loadPage'].visibility = 'show';

} else if (document.all) {
document.all['waitPage'].style.visibility = 'hidden';
document.all['loadPage'].style.visibility = 'visible';

} else if (document.getElementById) {
document.getElementById('waitPage').style.visibility = 'hidden';
document.getElementById('loadPage').style.visibility = 'visible';
}
}
</SCRIPT>

In the body tag:
<BODY onload="initWait();">

Within the body...
<DIV id="waitPage">
This is where the graphics, or Please wait... text would go
</DIV>

<DIV id="loadPage">
This is where all the work goes (function calls, etc)
</DIV>

And that's it!!! Well, I tried this and it doesn't work. Is there
anything I'm missing? Does it matter what engine renders my JSPs
(Tomcat)? Does it matter what kind of work is being done? The type of
HTML that is built into the waiting DIV tag (for example, can I use
table tags?)?

Here is what I have in each DIV tag...

<DIV id="waitPage">
<BR><BR><BR><BR><BR>
<SPAN align="center">Please wait while your information is being
loaded...</SPAN>
<BR><BR>
<SPAN align="center"><IMG src="images/wait.gif" border="0"></
SPAN>
<BR><BR>
</DIV>

<DIV id="loadPage">
<%
session = request.getSession(true);
//session time-out clause
if ((session.isNew()) | (session.getAttribute("prop.primdb") ==
null)) {
session.invalidate();
response.sendRedirect("TimeOut");
return;
}

//If the info has not already been loaded, go ahead and set up the
information
if (!request.getParameter("ep").equals((String)
session.getAttribute("info.loaded"))) {
//If it wasn't loaded, it is now...
session.setAttribute("info.loaded", request.getParameter("ep"));

int uid =
java.lang.Integer.parseInt(""+session.getAttribute("user.id"));
LoadUserData lsd = new LoadUserData();

String setList[][] = lsd.getSets();
session.setAttribute("info.sel", setList);

String songsList[][] = lsd.getSongs();
session.setAttribute("info.sol", songsList);

String concertsList[][] = lsd.getConcerts();
session.setAttribute("info.cl", concertsList);

String bandsList[][] = lsd.getBands();
session.setAttribute("info.bl", bandsList);

LogicSongStatus lss = new LogicSongsStatus();
lss.generateSongs(session, "");

LogicBandMap lbm = new LogicBandMap();
lbm.generateMap(session);
}

if (request.getParameter("v").equals("s")) {
response.sendRedirect("sSongs.jsp");

} else if (request.getParameter("v").equals("m")) {
response.sendRedirect("sMap.jsp");

} else if (request.getParameter("v").equals("b")) {
response.sendRedirect("sBands.jsp");
}

%>
</DIV>


Thanks for sheding some light!

Nino
 
A

angrybaldguy

Hi.

I have tried, and tried again to build a "Please wait..." loading page
in JSP. I have read all the posts I could find on the matter and
incorporated what seemed to be a set way to do this.

Here is the premise that just about every bit of information I
gathered suggested:
In the HEAD tag:
<STYLE>
#waitPage { position: absolute; }
#loadPage { position: absolute; visibility: hidden; }
</STYLE>

<SCRIPT language="JavaScript">
function initWait () {
if (document.layers) {
document.layers['waitPage'].visibility = 'hide';
document.layers['loadPage'].visibility = 'show';

} else if (document.all) {
document.all['waitPage'].style.visibility = 'hidden';
document.all['loadPage'].style.visibility = 'visible';

} else if (document.getElementById) {
document.getElementById('waitPage').style.visibility = 'hidden';
document.getElementById('loadPage').style.visibility = 'visible';
}
}
</SCRIPT>

In the body tag:
<BODY onload="initWait();">

Within the body...
<DIV id="waitPage">
This is where the graphics, or Please wait... text would go
</DIV>

<DIV id="loadPage">
This is where all the work goes (function calls, etc)
</DIV>

And that's it!!! Well, I tried this and it doesn't work. Is there
anything I'm missing? Does it matter what engine renders my JSPs
(Tomcat)? Does it matter what kind of work is being done? The type of
HTML that is built into the waiting DIV tag (for example, can I use
table tags?)?

JSPs are completely[1] evaluated by the server into an internal buffer
and then sent to the browser all at once. Even if it weren't, you'd
want to call out.flush (); after your waitPage div had been output but
before the loadPage div was sent.

[1] Usually, unless it's not. As with so much else, this is
configurable behaviour.
 
N

Nino

I have tried, and tried again to build a "Please wait..." loading page
in JSP. I have read all the posts I could find on the matter and
incorporated what seemed to be a set way to do this.
Here is the premise that just about every bit of information I
gathered suggested:
In the HEAD tag:
<STYLE>
#waitPage { position: absolute; }
#loadPage { position: absolute; visibility: hidden; }
</STYLE>
<SCRIPT language="JavaScript">
function initWait () {
if (document.layers) {
document.layers['waitPage'].visibility = 'hide';
document.layers['loadPage'].visibility = 'show';
} else if (document.all) {
document.all['waitPage'].style.visibility = 'hidden';
document.all['loadPage'].style.visibility = 'visible';
} else if (document.getElementById) {
document.getElementById('waitPage').style.visibility = 'hidden';
document.getElementById('loadPage').style.visibility = 'visible';
}
}
</SCRIPT>
In the body tag:
<BODY onload="initWait();">
Within the body...
<DIV id="waitPage">
This is where the graphics, or Please wait... text would go
</DIV>
<DIV id="loadPage">
This is where all the work goes (function calls, etc)
</DIV>
And that's it!!! Well, I tried this and it doesn't work. Is there
anything I'm missing? Does it matter what engine renders my JSPs
(Tomcat)? Does it matter what kind of work is being done? The type of
HTML that is built into the waiting DIV tag (for example, can I use
table tags?)?

JSPs are completely[1] evaluated by the server into an internal buffer
and then sent to the browser all at once. Even if it weren't, you'd
want to call out.flush (); after your waitPage div had been output but
before the loadPage div was sent.

I actually ran some more tests, and out.flush(); did nothing. It never
ended up sending anything out. I tried switching around the visibility
of the layers to no avail. Once the JSP starts doing work, the browser
just spins until it's done and then advances. No waiting screen, not
out.flush();, nothing. Any other ideas? Any reason why out.flush()
might not be working?

Nino
 
A

angrybaldguy

(snip "please wait"-style page)
JSPs are completely[1] evaluated by the server into an internal buffer
and then sent to the browser all at once. Even if it weren't, you'd
want to call out.flush (); after your waitPage div had been output but
before the loadPage div was sent.

I actually ran some more tests, and out.flush(); did nothing. It never
ended up sending anything out. I tried switching around the visibility
of the layers to no avail. Once the JSP starts doing work, the browser
just spins until it's done and then advances. No waiting screen, not
out.flush();, nothing. Any other ideas? Any reason why out.flush()
might not be working?

You need to read and understand both sentences in my post. The JSP
container, by default, isn't sending anything to the browser at all
until it finishes evaluating the page. You may be able to change that
behaviour -- you'll need to read the container documentation (eg., for
Tomcat you'd have to read the Tomcat docs) to find out how, since it's
not covered by the Servlet spec.

As long as the servlet container is buffering the page, adding flushes
to the output generation will not help you.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top