2

ユーザーからの選択肢の配列を収集するjsp/htmlフォームがあります。たとえば、「この食べ物の何が好きでしたか?」と尋ねます。また、ユーザーは入力フィールドごとに1つの回答を追加できます(無制限の数の選択肢を入力するオプションがあります)。htmlは次のようになります。

<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>

..。

私のバックエンド(Springを使用している)では、choiceList配列をString[] choicesJava配列に割り当てます。

これに関する私の問題は、誰かが入力フィールドの1つにコンマ区切りのリスト(たとえば、apple、mango、orange ")を入れ、別の入力フィールドに" pineapple "を入れた場合、バックアップされたjava配列はユーザ​​ー入力が4つ別々であると見なすことです。 htmlフォーム配列choiceList[]は基本的にコンマ区切りのリストであるため、アイテム(アップル、マンゴー、オレンジ、パイナップル) 。

ユーザーが2つの入力フィールドのみに入力したことを実際に確認できるように、フォームで何をする必要がありますか?明確にするために、Java配列をサイズ4ではなくサイズ2にします。

4

4 に答える 4

2

@InitBinderアノテーションを使用して、文字列配列のバインディングを構成できます。

@InitBinder("choiceList")
public void fqBinderInit(WebDataBinder b) {
  b.registerCustomEditor(String[].class, new StringArrayPropertyEditor("&"));
}  
于 2012-04-09T15:14:15.233 に答える
1

@Stealth - 私の答えは少し大きいので、新しい答えを追加しました。動的入力がフォームに追加されている場合、完全な入力リストをjson文字列として持ち、リクエストで完全なjson文字列をサーバーに送信する1つの解決策を考えることができます。たとえば、現在「choiceList」があるため、独自の規則で入力の名前を付けることができます。入力を「choiceList1」、「choiceList2」などにすることができます。既存のカウントを維持し、新しいものを作成するときにカウンターをインクリメントして新しい名前を形成することができます。たとえば、フォームの読み込み時に 2 つのフィールドがある場合、カウンターは 2 です。js を使用して新しいフィールドを作成すると、カウンターは 3 になり、テキスト フィールド名は「choiceList3」になります。[{"choiceList1": "apple, mango, orages", "choiceList2": "pear", "choiceList3": "strawberry"}]. この文字列全体をバックエンドに送信して、バックエンドで処理することができます。

于 2012-04-10T02:54:06.223 に答える
1

私は基本的にしばらく前に同じ問題を抱えていて、この質問をしました SO: How to prevent parameter binding from interpreting commas in Spring 3.0.5 ?

受け入れられた回答により、Spring がユーザーの入力のコンマを解釈するのを防ぐことができます。

于 2012-04-10T10:41:41.240 に答える
0

入力タイプの名前が同じ場合、あなたの場合はその「choiceList」なので、理想的には http リクエストは両方の入力をコンマ区切りで追加することによって行います。理想的には、choice1、choice2 などの異なる名前の 10 個の異なるテキスト フィールドを用意し、それらが入力する入力を取得し、それに応じてバックエンドで処理する必要があります。これが私の考えです。

于 2012-04-09T16:23:32.610 に答える