2016-06-17 10 views
0

jspで作業中です 実装しようとしているのは非常に簡単です。jsp:レンダリング/実行の順序を変更できますか

  • 処理、ユーザーの表示スピナー

は、だから私は

<%@ 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> 

以下のように実装しているが、ページはスレッド後に現れながら、Javaの

  • といくつかの時間のかかる作業を行います終了しました。注文を元に戻すことはできますか?私は(spinner gif
  • Javaのロジックに
  • キャッチJavaの実行の復帰を実行するために

    • ショーのhtmlページを望んでいた何
    • リターンはjavascriptの
    と、警告true、ある場合

    それは可能ですか? あなたのお返事ありがとう

  • 答えて

    1

    サーバー側の操作の変更では、ページのレンダリングを動的に行うことはできません。

    ページは常にif(isFinish)が実行された場所にレンダリングされます。

    サーバーは、すべてのJavaが実行され、1つのブロックで完了した場合にのみ、完全なhtmlページをユーザーに送信します。フロントエンドで実装する必要があります。たとえば、読み込みの基本ページを送信し、ajax呼び出しなどで長期プロセスを呼び出します。

    +0

    ご回答ありがとうございます。私は 'Thread'で実装しているので、Threadが動作しているかどうかを表示する必要があります。しかし、私は10を数え、順番にページを表示します。 (私はあなたのポイントフロントエンドの処理を持っていますが、それは私の場合はそうではありません)私は他のオプションがありますか? –

    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

    回答ありがとうございます。できます。ただし、基本的にサーバー側のスクリプトの順序を制御することはできません。だから私は他の答えを選んだ。ありがとう –