0

これが状況です。ドロップダウンメニューがあります。このドロップダウンメニューのオプションは、データベースからいくつかの値をフェッチすることによって入力されています。これを行うために私がしたことは次のとおりです..:-

<select name="product_list" onchange="selectProduct(this.value)">
    <option value="none">Select one</option>
        <%
            List<String> options = new ArrayList<String>();
            DynamicCombo comboBox = new DynamicCombo();
            options = comboBox.generateComboBox();
            Collections.sort(options);
            int tempVar = 0;
            while (tempVar < options.size()) {
                out.print("<option value=\"");
                out.print(options.get(tempVar));
                out.print("\">");
                out.print(options.get(tempVar));
                out.print("</option>");
                tempVar++;
            }
        %>
</select>

DynamicComboは、「generateComboBox()」というメソッドを持つクラスです。このメソッドは、データベースからフェッチされたすべての値を含む配列リストを返すだけです。これは、フロントエンド(jspページ)のドロップダウンボックスに表示する必要があります。私のjspページでは、このリストを繰り返し処理し、オプションとして適切に印刷します。これは完全に正常に機能します。

これで、フォームに「textbox1」という別のテキストボックスが表示されます。ここでの要件は、ユーザーが上記のドロップダウンボックスから選択した内容に応じて、このテキストボックスの値を更新する必要があることです。

したがって、たとえば、ユーザーがドロップダウンボックスから「prod1」(バックエンドデータベーステーブルの主キー)オプションを選択した場合、対応する値(製品名)をデータベーステーブルからフェッチし、で更新する必要があります。 'textbox1'という名前のテキストボックス。

もう1つは、この全体がフォームに含まれていることです。このフォームは、さらに処理するために最終的にサーブレットに送信されることになっています。

では、どうすればこれを達成できますか。

4

2 に答える 2

1

私は自分の問題の解決策を見つけました。これは最も洗練された方法ではないかもしれませんが、かなりうまく機能します。

したがって、私の要件に従って、私がまさにやりたかったことは....ユーザーがドロップダウンボックスから選択したものに応じて、フォームのテキストボックスに値(データベースから取得される)を挿入することでした私のフォームに存在します。

これを達成するために、メインフォーム内にフォームをネストする方法があれば、問題を解決できると考えました。しかし、フォームのネストが許可されていないことがわかりました。したがって、私が考えた次のオプションは、ユーザーが送信ボタンをクリックせずに同じフォームを送信し、「不完全な」送信として適切に処理する方法でした(フォームはユーザーによって手動で送信されるという意味で)送信ボタンをクリックして) サーバー上で。

だから私は単にドロップダウンボックスの「onChange」イベントを利用しました。フォームに追加の非表示フィールドを作成しました。非表示フィールドの値を文字列「部分送信」に設定するだけの単純な JavaScript 関数を作成し、メイン フォーム (たとえば「form1」という名前) を次のように送信します。

document.getElementById("hidden_id").setAttribute("value","partial submit");
form1.submit;

上記を実行する関数は、ドロップダウン ボックスの onchange イベントが発生するたびに (および毎回) 呼び出されます。

ユーザーが最後にフォームの送信ボタンをクリックして最終的に完成したフォームを送信すると、別の JavaScript 関数が呼び出され、フォームの非表示フィールドの値を文字列 "final submit" に設定するだけでフォームが送信されます。なので :-

document.getElementById("hidden_id").setAttribute("value","final submit");
form1.submit;

今私のサーバーで、この隠しフィールドの値を次のようにチェックしました:-

if(request.getParameter("hidden_id").equals("partial Submit"))
{
  // make a database connection, pass the value user selected from the drop down box
  // to a prepared statement that does the query for getting the 'productName' from 
  // the database, collect the returned string in a variable and set a 
  // request attribute with this returned value. This value can simply be used in the 
  // jsp to fill in the value part of the textbox1.
}
else
{
  if(request.getParameter("hidden_id").equals("final Submit"))
  {
   // do the rest of the final processing that needs to be done when user finally   
   // submits the completed form.
  }
  else
  {
     // throw an exception to take care of the possibility that the user might send 
     // in a 3rd value as a value for the hidden field.
  }
}
于 2013-03-02T10:53:11.207 に答える
0

のコードを提供していselectProduct(this.value) ないので、ドロップダウンの値を変更したときと同じように jsp ページを送信すると思います。

サーベルトでその場合は、リクエストオブジェクトにjspで表示したい値を設定します

request.setAttribute("valuetodisplay" ,valuetodisplay);

そして今jspで

<input type="text" value ='<%= request.getAttribute("valuetodisplay")%>' />
于 2013-02-16T18:08:33.130 に答える