単純な POJO モデル オブジェクトと Spring タグライブラリの「コマンド」プロパティを使用してフォームを作成する方法を示すチュートリアルがたくさんあります。
例: チュートリアル
私は自分の人生を困難にすることに成功しているようですが、フォームをjQueryダイアログボックスで実行しています...チェックボックスのステータスはjavascript関数で前処理されています。そのjavascript関数でAJAX呼び出しを介してこれを行っています。
すっごく、私のフォーム初期化は次のようになります:
<form:form action="javascript:associateArtifacts()">
これにより、私のJavaScriptメソッドが呼び出されました:
function associateArtifacts(){
/* JSONIFY the list of checked boxes and send that data to the server here in an AJAX call */
var artifacts = [];
$('#artifacts_container input:checkbox').each( function(j,listitem) {
artifacts.push(listitem.name);
});
$.ajax({
type: "POST",
url: "associateArtifacts.html",
data:JSON.stringify(artifacts),
success: function(html){
alert( "Submitted");
}
});
return false;
}
このポイントは、ユーザーが変更してサーバーに保存できるDBデータに基づいてチェックされるチェックボックスのリストを含むダイアログを構築することです。
私の問題は、ダイアログを表示してチェックボックスを入力し、値をロードしていることですが、JSON としてサーバーに送信されるデータをインターセプトして処理する方法がわからないため、考えていないようです。 .
以前は、URL 化されたパラメーターを使用してこれを行っていましたが、この場合は可変サイズの JSON データの大きな文字列です。
Spring MVC コンテナーがこの JSON データを割り当てるために、単一のリストを保持するだけのオブジェクトを定義する必要がありますか? なんかおかしいような…
考え?提案?これが完全に間違っていることに対する厳しい批判はありますか?
上記のいずれかに感謝します。
編集
署名は次のようになります。
@RequestMapping(value = "/associateArtifacts.html", method = RequestMethod.POST, headers = {"content-type=application/json"})
public void associateArtifacts(@RequestBody List<String> checkboxData){
Chrome ツールのデータからのクライアントは次のようになります。
["checkboxTitle1","checkboxTitle2","checkboxTitle3"]:
これは、checkBox 名の配列を取得してこれを行うと、クライアントによって生成されます。
JSON.stringify(arrayOfNames)
現在のエラーは次のとおりです。
HTTPStatus 415 - The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
編集#2
あなたが示唆したように、それは私のAJAX呼び出しでのcontentTypeの欠如でした。ありがとう。