有很多教程展示了如何使用简单的 POJO 模型对象和 Spring taglib 上的“command”属性构建表单。
示例: 教程
不过,我似乎很喜欢让我的生活变得艰难,并且让我的表单在一个 jQuery 对话框中运行......其复选框状态是使用 javascript 函数进行预处理的。我通过该javascript函数中的AJAX调用来做到这一点。
Sooo,我的表单初始化如下所示:
<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;
}
重点是构建一个包含复选框列表的对话框,这些复选框根据用户可以修改的数据库数据进行检查,然后保存回服务器。
我的问题是,我正在启动对话框并使用复选框填充并加载值,但我似乎没有考虑透彻,因为我不知道如何拦截以 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"]:
当我使用我的复选框名称数组并对它执行以下操作时,这是由我的客户生成的:
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 。谢谢。