5

ユーザーが任意の数の新しい入力フィールドを追加できるフォームの設計と処理は、JavaScriptを使用せずに非常に面倒です。

現在、私は次のことを行っています。フォームで2つの異なる送信ボタンを使用します。1つは新しい入力フィールドを追加するためのもので、もう1つはデータベースリクエストにつながるフォームを送信するためのものです。

  • 使用される方法はPOSTです

    新しい入力フィールドを追加するためにGETを使用したいのですが、1つのフォームで2つのメソッドを使用することはできないため、POSTリクエストで実行する必要があります。

  • 1つのタイプの入力フィールドに対してこれを作成するのはかなり簡単ですが、サブフォーム(同じフォームの入力フィールドの一部のグループ)に対してこれを行う必要がある場合、これは面倒であるだけでなく、エラーが発生しやすくなります。

私は満足していません。多くの処理コードを書き始めてリダイレクトを行うことなく、または少なくともエラーのリスクを減らすために実装を容易にすることなく、これを実現するためのよりインテリジェントな方法がありますか?

また、私はJavaサーブレットを使用しているので、これを一般的にエレガントに解決するためにJavaによって提供されるソリューションがあるかもしれません。

JavaScriptをオンにすると、別のソリューションを提供します。フォールバックソリューションのみに関心がありますが、これは通常のケースではありません。

4

1 に答える 1

2

JavaScriptを使用せずに作業すると、能力が大幅に制限されます。標準のHTTP要求/応答サイクルに依存する必要があります。つまり、新しいページを再構築し(入力フィールドを追加して)、毎回この新しいページを送信する必要があります。回避策はありません。

これが私がそれを実装する方法です:

<form action="/path/to/action" method="post">
  <input name="param_a" />
  <input name="param_b" />
  <button type="submit" name="next_input" value="param_c">Add a field</button>
  <button type="submit" name="submit">Submit your form</button>
</form>

...次に、サーバー側のコード内で、next_inputparamが送信されているかどうかを確認します。送信された場合、その値は、追加されるコントロールを取得するために使用されます-そして、対応する値(param_dたとえば)を次のに与えnext_inputます。

更新:しかし、これが本当に必要なのか疑問に思わずにはいられません。通常、これらのページが一般的なランディングページ(検索ロボットによってスキャンされる)である場合、「JSなし」の場合に設計します。JSを有効にせずにページにアクセスするが、すべてのきれいなものを有効にして使用することをいとわないユーザーについて考えてみてください...まあ、控えめに言っても、それはあまり費用対効果が高くありません。)。

于 2012-07-08T19:54:54.600 に答える