0

送信ボタンをダブルクリックした後に発生するイベントと、ボタンを 2 回クリックした後に発生するイベントを比較すると、論理フローの点でどのような違いがありますか?

私は Struts 1 アプリケーション (汚い設計) を持っていますが、ダブルクリックで実際に何が起こっているのか理解できません。

JSP は次のようになります。Add xItem をクリックすると、アクション クラスの doAdd() メソッドが呼び出されます (この場合、doAdd メソッドで str は null になります)。これは、xItemAdd.jsp に転送されます。

ここに画像の説明を入力

xItemAdd.jsp には、いくつかのチェックボックスとロード ボタンを含むプライマリ フォームが含まれています。ロードをクリックすると、選択したチェックボックスとリストボックスの値がフェッチされ、セッション属性に入れられ、再び xItemAdd.jsp に転送される場所で doAdd が呼び出されます。

ここに画像の説明を入力

xItemAdd.jsp には、対応するチェックボックスがチェックされている場合にフォームを表示するためのスクリプトレットが含まれています。そのため、1 と 3 のチェックボックスが選択され、[読み込み] がクリックされた場合、Form1 と Form3 が表示されるようになりました。

   <% for(int i=0;i<selmsgs.size();size++)
       {Systeml.out.println("i :"+i +"size "+selmsgs.size());
...%>

ここに画像の説明を入力

これはアクションクラスのスニペットです

   Class MyAction

    {...
     public Object doAdd(.......)
       { System.out.println("Add method :");
       String[] str=request.getParameter("SelectionList");
        ArrayList<String>[] mylist=request.getParameter("CheckedValues").split(',');
         //Allowing duplicate values to be added in mylist
        if(str!=null&&str.equals("true")
          request.getSession.setAttribute("IsLoaded","false"); 
           
        if(str!=null)
        {
         request.getSession.setAttribute("ObjectList",mylist);
        request.getSession.setAttribute("IsLoaded","true"); 
        }
       return SUCCESS;   
       }
    }

図 2 の [読み込み] ボタンを 1 回クリックすると、予想どおりビューが図 3 に変わり、もう一度クリックすると (選択したチェックボックスの) フォームが読み込まれ、図 3 のままになります。ただし、[読み込み] ボタンをダブルクリックした場合奇妙な動作があり、選択した各フォームが繰り返されて表示されます。そのため、図 3 はフォーム 1、フォーム 3 のようになり、再びフォーム 1、フォーム 3 になります。

doAdd メソッドが返された後、JSP が 2 回呼び出され、図 3 のように JSP の印刷行が次のように出力されます。

i: 0 size :2

i:0 size  :1

i:1 size : 2

2 つのスレッドが JSP スクリプトレットを実行しているように見える

ここで読み込みボタンをダブルクリックした場合と、2 回同時にクリックした場合の動作の違いを説明していただけますか?

ロードボタンをダブルクリックした後、実際には何が起こりますか?

4

1 に答える 1

0

送信ボタンのダブルクリックは、2 回のシングルクリックです。1 つ目はサーバーに送信され、サイレントに処理されます (サーバーは応答を送信しますが、ブラウザーでは応答を受信しないため)。2 つ目もサーバーで処理されますが、ブラウザーは応答を受信します。

ボタンはアイコンではありません。ダブルクリックは彼らにとって意味がありません。ユーザーは、ボタンが 1 回のクリックであることを知っておく必要があります。アプリケーションのユーザーがそれを知らない場合は、サブミットを処理する前に JavaScript を使用してクリック時にボタンを無効にし、ダブルクリックを試みないようにすることができます。https://stackoverflow.com/questions/5944254/preventing-double-click-of-submit-buttonを参照してください

于 2013-11-06T21:57:56.210 に答える