1

私が抱えている問題は、ドロップダウン リストに 2 つの値のセットがあることです。タイプ「A」が選択されている場合、テキスト ボックスにデータベースからの値を入力し、読み取り専用にします。タイプ「B」が選択されている場合、ボックスは空で編集可能になります。

私の元のコードはjsp/strutsで書かれており、これを使用してこれを達成しました

onchange="javascript:submit()"ページをリロードするには

この方法が原因で、サーバー側の検証にも他の問題があります。

変更時にjspページをリロードする方法はありますか?その方法で、セッションに保持されている値に応じてページの外観を変更するjavascriptを記述できます。そうすれば、ページが適切に入力され、サーバー側の検証が設計どおりに機能する場合にのみ、保存/送信機能が呼び出されます。

これは AJAX が得意とすることですが、可能であれば回避しようとしています。

4

7 に答える 7

3

元のページの読み込み時にテキストボックスの他のすべての可能な値を読み込む場合を除き、データベースに戻る必要がない場合は、AJAX が唯一の他のオプションです。テキスト ボックスを IFRAME に配置することもできますが、そのアプローチでは、AJAX を使用するよりも多くの問題が発生する可能性があります。

于 2008-11-10T17:32:28.087 に答える
1

私はあなたの問題に合うtaglibを知っています: AjaxTags。私はこのtaglibをJ2EEプロジェクトで使用しており、Webアプリケーションに統合するのは非常に簡単です。

このtaglibは、jspファイルでAJAXリクエストを実行するように設計されたいくつかのタグを提供します。

各タグの説明は次のとおりです。http://ajaxtags.sourceforge.net/usage.html

あなたを助けるタグはajax:selectタグです。これにより、jspページ全体をリロードすることなく、他のフィールドに依存する選択タグを設定できます。

あなたがそれについてもっと情報を持っているならば、私に尋ねてください、そして、私は迅速に答えようとします。

于 2008-11-11T05:23:45.233 に答える
1

AJAX がなければ、あなたが求めていることは難しくなります。もう 1 つのオプション (醜い) は、2 番目のリスト ボックスのすべての可能な値を、配列や辞書などのデータ構造に書き出すことです。

次に、ユーザーが最初のリスト ボックスから選択したときに、データ構造から値を取得する JavaScript を記述します。これを実行し、クロス ブラウザで正しく実行するために必要な JavaScript の量は、単純に AJAX を使用するよりもはるかに困難です。

于 2008-11-10T17:35:39.263 に答える
1

なぜ今日の世界で AJAX を避けようとするのかわかりませんが、今日の JS ライブラリは非常に単純なので、試してみないのはおかしいです。

Vincent が指摘したように書かれたページを差し替える必要がありました。4 年前のデータの相対的なサイズを考えると、当時はアプリにとって意味があったと思います。ただし、アプリがスケーリングされたので、ページがデータ構造を繰り返し解析するのに 30 秒以上かかっていました (JS の書き方が悪いのでしょうか?)。

すべてのロジックを、渡された内容に基づいて 2 番目のドロップダウンの値の JSON 応答を単純に返すサーブレットへの非常に単純な AJAX 呼び出しに置き換えました。応答は基本的に瞬時です。

幸運を祈ります。

于 2008-11-10T17:45:57.387 に答える
1

1 つの方法は、フォームのアクションを変更して、「保存」URL とは異なる URL にフォームを送信することです。これにより、データをコミットする代わりに、フォームの特定の側面をリロードしてフォーム自体に戻ることができます。

<script>
  function reload() {
    document.forms[0].action="reloadFormData.jsp";
    document.forms[0].submit();
  }
</script>
<form action="saveData.jsp" method="post">
  <select id="A" name="B" onchange="reload()"><!-- blah --></select>
  <select id="B" name="B"><!-- blah B --></select>
  <input type="submit">
</form>
于 2008-11-10T20:13:59.630 に答える
1

Strindhaugが言ったことに沿っていますが、動的データが必要な場合:

バックエンドに JS をページに書き込んでもらい、JS が必要に応じてフォームを変更することはできますか? バックエンドは説明などのためにいくつかの変数を伝播でき、JS はそれに応じてフォームを変更/更新できます。これに慣れていない場合は、jQueryなどのライブラリを使用すると、このようなことがより簡単になり、自分で作成するよりもクロスブラウザーになります (少なくとも私の経験では)。

余談ですが、コーディングが難しかったために AJAX を使用していない場合 (私の最初の経験はゼロからであり、きれいではなかったため、しばらく使用していませんでした)、他の人が言ったように、MooToolsなどのライブラリを使用すると、今は本当に簡単です。また、AJAX を適切に使用することは恥ではありません。人々がそれを使って愚かなことをするので、悪いラップがありますが、事前に作成された値をフォームに単純に書き込むことができない場合、またはライブルックアップを行う必要がある場合、これは AJAX の適切な使用法の 1 つです。

于 2008-11-15T16:51:26.567 に答える
1

フォームのどこか上の選択肢 (通常はチェックボックスまたはラジオボタン) に応じて、ドロップダウン ( <select>) またはテキストフィールド ( ) のいずれかが必要であるということを正しく理解している場合は、<input type="text">

とにかく、サーバー上で2種類の入力を別々に処理する必要があるかもしれないので、フォームの領域に選択ボックスとテキストフィールドの両方を異なる名前とIDで配置し、そのうちの1つを非表示にしないでください( display = none)。次に、選択が変更されたときに表示を切り替えます。サーバーでは、選択入力に応じて、selectboxまたはtextarea入力のいずれかを選択します(これらも無効にしない限り(両方とも存在しますdisabled="disabled"が、不要だと思います))。

もちろん、ユーザーが通常はテキスト入力のみを必要とし、数回しか必要としないと予想される場合は、大量のリストが必要になります。リストを取得するにはajaxを使用することをお勧めします。しかし、逆の場合 (テキスト フィールドが必要になるのはたまにしかない場合) は、上記で想定したように、両方を初期フォームに含める方が高速です。

ドロップダウンに簡単に生成できるデータ (数年前から数百年前まで) のみが含まれている場合は、Javascript の for ループを使用してクライアント側でデータを生成する方がはるかに高速です (サーバーの帯域幅が少なくて済みます)。

于 2008-11-13T13:13:31.690 に答える