2016-06-17 6 views
0

Je travaille sur jsp, Ce que j'essaie de mettre en œuvre est assez simple.jsp: Puis-je changer l'ordre de rendu/exécution

  • faire un travail de temps avec Java
  • tout traitement, montrer la spinner

J'ai donc mis en œuvre comme ci-dessous

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ page isThreadSafe="true" %> 
<% 

    boolean isFinish = false; 
    Thread executeThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      for(int i = 0; i < 10; i++){ 
       try{ 
        System.out.println(i + " Thread "); 
        Thread.sleep(1000); 
       }catch(Exception ex){ 
        System.err.println(ex); 
       } 
      } 
     } 
    }); 

    executeThread.run(); 
%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset='utf-8'> 
     <title>Loading</title> 
    </head> 
    <body> 
     <div class="popup" style="text-align: center;"> 
      <div class="l_img"> 
       <img src="resources/image/spinner/loading_gif.gif" alt="LOADING..."> 
      </div> 
      <div class="b_txt">Processing</div> 
      <div class="s_txt">Please, wait..</div> 
     </div> 
    </body> 
    <% 
     if(isFinish){ 
    %> 
     <script> 
      alert('done'); 
     </script> 
    <% 
     } 
    %> 
</html> 

Cependant, page après discussion a terminé. Puis-je inverser la commande? Ce que je voulais pour

  • page html show (spinner gif)
  • exécuter Logiques Java
  • attraper le retour d'exécution Java
  • si le retour est true, puis alerte avec javascript

Est-ce possible? Merci pour vos réponses

Répondre

1

Vous ne pouvez pas faire une opération côté serveur changer dinamiquement le rendu de la page.

La page sera toujours affichée là où if(isFinish) a été exécutée.

le serveur enverra la page html complète à l'utilisateur seulement quand tout le java a été exécuté et dans un bloc! vous devez l'implémenter sur le front-end, par exemple vous envoyez une page de base de chargement et vous appelez le processus à long terme avec un appel ajax ou quelque chose de similaire.

+0

Merci pour votre réponse. Depuis que j'ai implémenté avec 'Thread', j'ai pensé qu'il devrait apparaître si Thread est en cours d'exécution ou non. Cependant, je compte 10 et montre la page dans l'ordre. (J'ai compris votre point de vue - la manipulation frontale - mais ça ne peut pas être comme ça dans mon cas) Est-ce que j'ai d'autres options? –

0
<!DOCTYPE html> 
<html> 
<body onload="alert('done')"> 
    Put your spinner here. 
    Some text here is necessary here for the browser to start displaying. 
    Otherwise it will wait until it receives enough of a response to begin displaying anything. 
    I am not sure how much is necessary. This works for me. 
<% 
    out.print("<br/>Starting processing now. <br/>"); 
    out.flush(); 
    Thread.sleep(2000); 
    out.print("<br/>Processing..... <br/>"); 
    out.flush(); 
    for(int x = 1; x < 4; x++){ 
     Thread.sleep(2000); 
     out.print("Result " + x + ".<br/>"); 
     out.flush(); 
    } 
%> 
</body> 
</html> 
+0

Merci pour votre réponse. Ça marche. Cependant, fondamentalement, ne peut pas contrôler l'ordre des scripts côté serveur. J'ai donc choisi une autre réponse. Merci quand même –