Java Ajax POST删除多个同名项目Spring MVC
我正在尝试删除web应用中多个同名的项目。但是当我写这篇文章时,它给了我一个错误500 这是我的表格代码Java Ajax POST删除多个同名项目Spring MVC,java,ajax,spring,spring-mvc,post,Java,Ajax,Spring,Spring Mvc,Post,我正在尝试删除web应用中多个同名的项目。但是当我写这篇文章时,它给了我一个错误500 这是我的表格代码 <form method="POST" name="deleteFormAdd" id="deleteFormAdd" enctype="multipart/form-data"> <input type="hidden" name="_csrf" th:value="${_csrf.token}" />
<form method="POST" name="deleteFormAdd" id="deleteFormAdd" enctype="multipart/form-data">
<input type="hidden" name="_csrf" th:value="${_csrf.token}" />
<!--Asset ID set to hidden so the User can't see it-->
<input type="hidden" th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
th:name="assetID"
th:value="${deleteCategory.assetID}"/>
<!-- For showing all the Asset to be deleted -->
<input class="w3-input w3-border w3-round-large" type="text"
th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
th:name="${DeleteCategoryObject[__${itemStat.index}__].assetType}"
th:value="${deleteCategory.assetType}"
disabled="disabled"/>
<br></br>
<input type="button" class="btn btn-primary btn-block" value="Yes" th:onclick="'javascript:submitForm(\'deleteFormAdd\',\''+@{/delete-asset}+'\')'" />
<button type="reset" onclick="window.location.href = 'manage-assets.html';" class="btn btn-default btn-block"> Cancel</button>
</form>
弹簧控制器
@RequestMapping(value = "/delete-asset", method = RequestMethod.POST)
public @ResponseBody String deleteAsset(@ModelAttribute List<AssetCategory> assetCategories) {
JsonObject result = new JsonObject();
if (assetCategories != null && !assetCategories.isEmpty()) {
String[] arr = new String[assetCategories.size()];
for (int i =0; i < assetCategories.size(); i++) {
arr[i] = assetCategories.get(i).getAssetID();
}
assetService.deleteAssets(arr);
result.addProperty("result", "Success");
result.addProperty("status", 1);
result.addProperty("message", "Asset Deleted!");
}
return result.toString();
}
春刀
@Query("Delete From AssetCategory A WHERE A.assetID IN (:assetID)")
public AssetCategory deleteAssets(@Param("assetID") String[] assetID);
弹簧控制台错误
无法实例化[java.util.List]:指定的类是接口],根本原因是
org.springframework.beans.beans实例化异常:未能实例化[java.util.List]:指定的类是接口
这是表单数据(它包含资产ID)
您的ajax功能似乎存在问题。请检查以下内容:
function submitForm(formID, url) {
var assetIdList = [];
var assetIdObj;
$("#" + formID).find('input[name="assetID"]').each(function () {
assetIdObj = {};
assetIdObj.assetID = $(this).val();
assetIdList.push(assetIdObj);
});
$.ajax({
dataType: 'json',
url: url,
data: {assetCategories: assetIdList},
type: "POST",
enctype: "multipart/form-data",
processData: false,
contentType: false,
success: function (data) {
if (data.status === 1) {
openAlertDialog("Success", "The Asset type has been deleted!", "Continue", "manage-assets");
} else {
openAlertDialog("Error", data.message, "Continue", "manage-assets");
}
},
error: function (data) {
openAlertDialog("Error", data.message, "Continue", "manage-assets");
},
});
}
从以下位置更新此html代码:
<input type="hidden" th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
th:name="assetID"
th:value="${deleteCategory.assetID}"/>
为此:
<input type="hidden" th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
name="assetID"
th:value="${deleteCategory.assetID}"/>
您的ajax功能似乎存在问题。请检查以下内容:
function submitForm(formID, url) {
var assetIdList = [];
var assetIdObj;
$("#" + formID).find('input[name="assetID"]').each(function () {
assetIdObj = {};
assetIdObj.assetID = $(this).val();
assetIdList.push(assetIdObj);
});
$.ajax({
dataType: 'json',
url: url,
data: {assetCategories: assetIdList},
type: "POST",
enctype: "multipart/form-data",
processData: false,
contentType: false,
success: function (data) {
if (data.status === 1) {
openAlertDialog("Success", "The Asset type has been deleted!", "Continue", "manage-assets");
} else {
openAlertDialog("Error", data.message, "Continue", "manage-assets");
}
},
error: function (data) {
openAlertDialog("Error", data.message, "Continue", "manage-assets");
},
});
}
从以下位置更新此html代码:
<input type="hidden" th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
th:name="assetID"
th:value="${deleteCategory.assetID}"/>
为此:
<input type="hidden" th:each="deleteCategory, itemStat : ${DeleteCategoryObject}"
name="assetID"
th:value="${deleteCategory.assetID}"/>
您使用的是
多部分/表单数据
。因此,您的请求头具有multipart/formdata
内容类型,其中数据作为表单类型。like键=值
因此,只需删除@modeldattribute
注释,并将消费
属性添加到映射注释中
//如果您使用的spring版本超过了4.3,请使用以下@PostMapping以提高可读性
//@PostMapping(value=“/delete asset”,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
@RequestMapping(value=“/delete asset”,method=RequestMethod.POST,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
public@ResponseBody字符串deleteAsset(列出资产类别){
JsonObject结果=新建JsonObject();
//您可以使用apache的commons集合
if(收款项不为空(资产类别)){
//您还可以使用流api
字符串[]arr=assetCategories.stream()
.map(AssetCategory::getAssetID)
.toArray();
资产服务。删除资产(arr);
结果。添加属性(“结果”、“成功”);
结果。添加属性(“状态”,1);
addProperty(“消息”,“资产已删除!”);
}
返回result.toString();
}
您使用的是多部分/表单数据
。因此,您的请求头具有multipart/formdata
内容类型,其中数据作为表单类型。like键=值
因此,只需删除@modeldattribute
注释,并将消费
属性添加到映射注释中
//如果您使用的spring版本超过了4.3,请使用以下@PostMapping以提高可读性
//@PostMapping(value=“/delete asset”,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
@RequestMapping(value=“/delete asset”,method=RequestMethod.POST,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
public@ResponseBody字符串deleteAsset(列出资产类别){
JsonObject结果=新建JsonObject();
//您可以使用apache的commons集合
if(收款项不为空(资产类别)){
//您还可以使用流api
字符串[]arr=assetCategories.stream()
.map(AssetCategory::getAssetID)
.toArray();
资产服务。删除资产(arr);
结果。添加属性(“结果”、“成功”);
结果。添加属性(“状态”,1);
addProperty(“消息”,“资产已删除!”);
}
返回result.toString();
}
但它给了我一个错误500,需要注意的是,这意味着服务器端出现了问题(在您的例子中是Spring)。请查看spring日志以获得更多线索,我怀疑可能是删除过程本身而不是ajax。您在spring控制台上收到了一条错误消息。张贴它。(另外,使用列表
;这对每个人来说都比较容易。)我更新了帖子,并将错误包含在控制台中,可能与此无关,但。。。。为什么deleteAssets(@Param(“assetID”)字符串[]assetID)
返回AssetCategory
的实例(与void
或列表相对,例如从哪里获得该实例)?查看@Query
,@Modifying
和deleteBy
之间的差异-有一个很好的总结。我在baeldung网站上更改了它。但它仍然显示了错误500,但它给了我一个错误500,需要注意的是,这意味着服务器端出现了问题(在您的例子中是Spring)。请查看spring日志以获得更多线索,我怀疑可能是删除过程本身而不是ajax。您在spring控制台上收到了一条错误消息。张贴它。(另外,使用列表
;这对每个人来说都比较容易。)我更新了帖子,并将错误包含在控制台中,可能与此无关,但。。。。为什么deleteAssets(@Param(“assetID”)字符串[]assetID)
返回AssetCategory
的实例(与void
或列表相对,例如从哪里获得该实例)?查看@Query
,@Modifying
和deleteBy
之间的差异-有一个很好的总结。我在baeldung网站上更改了它。但它仍然显示错误500。