gpt4 book ai didi

java.lang.IllegalStateException : Neither BindingResult nor plain target object in ajax call

转载 作者:行者123 更新时间:2023-12-02 08:42:06 24 4
gpt4 key购买 nike

java.lang.IllegalStateException:ajax 调用中既没有 BindingResult 也没有普通目标对象

我正在使用 Thymeleaf 和 Spring MVC,但我在动态表单方面遇到了一些问题。我有一个带有选择器的表单,当它发生更改时,我执行 Ajax 调用,这应该显示另一个选择器和一个字段。

我有这些对象:

 public class SaleMini{
private int businessId;
private int sellerId;
private int productId;
private int amount;
private int row;
private String date;
private List<SaleItem> item;
//getters and setters
}

public class SaleItem{
private int productId;
private int amount;
private boolean gift;
private List<Integer> components;
private List<Composition> compositionList;
//getters and setters

}

我的html代码是:

<form id="sales" action="#" th:action="@{/sales/add}" method="post">                    
<div class="row">
<div class="form-group col-md-6">
<label class="label-control" th:text="#{label.equipment}"></label>
<select th:field="${sales.businessId}" class="form-control" onchange="submitData()"> <!--- Equipment List --->
<option th:each="e : ${equipmentList}" th:value="${e.id}" th:text="${e.name}"></option>
</select>
</div>

<div class="form-group col-md-6">
<label class="label-control" th:text="#{label.seller}"></label>
<select th:field="${sales.sellerId}" class="form-control">
<option th:each="s : ${sellerList}" th:value="${s.id}" th:text="${s.name + ' ' + s.surname}"></option>
</select>
</div>
</div>

<div id="product-panel" class="row" >
<div th:fragment="resultsList">
<div th:each="i,rowStat : ${itemList}">
<p th:text="${i.productId}"></p>
<select class="form-control products_select" th:field="${i.productId}" th:onchange="${'javascript:callComposed(' + rowStat.index + ')'}" >
<option value="0" >Select Product</option>
<option th:each="p : ${productList}" th:value="${p.id}" th:text="${p.name}" th:attr="data-compound=${p.compound},data-generic=${p.genericId}"></option>
</select>
</div>
<a class="btn btn-action" id="btn-add" onclick="submitData()" style="margin-top: 25px !important;"><span class="fa fa-plus fa-btn"></span></a> <!--I should add as many product as I wanted-->
</div>
</div>

<div class="row">
<div class="form-btn">
<input type="submit" th:value="#{label.save.sale}" class="btn btn-custom"/>
</div>
</div>
</form>

当设备列表发生变化时,我进行ajax调用

function submitData(){
$.ajax({
'url': 'sales/addRow',
'type': 'POST',
'data': $('#sales').serialize(),
'success': function(result){
$("#product-panel" ).html( result );
},
});
}

我在 Controller 上调用的函数是:

@RequestMapping(value = "/addRow", method = RequestMethod.POST)
public String addRow(@Valid SaleMini sale, BindingResult bindingResult,ModelMap model) {

List<SaleItem> siList = new ArrayList<SaleItem>();

if(sale!=null && sale.getBusinessId()!=0)
{
SaleItem si = new SaleItem();
si.setAmount(1);
siList.add(si);

}
model.addAttribute("itemList", siList);
return folder+"/add :: resultsList";
}

问题是当我调用submitData()时。

我可以很好地调用 Controller (submitData(),然后 addRow),并且它有效,但是当我获取数据时出现错误:

java.lang.IllegalStateException:BindingResult 和 bean 名称“i”的普通目标对象都不能用作请求属性我在调用后获取数据,但无法使用 th:field 访问数据

在 html 部分这有效(th:text):

<p th:text="${i.productId}"></p>

但这不是(th:field),我不知道为什么:

<select class="form-control products_select" th:field="${i.productId}" th:onchange="${'javascript:callComposed(' + rowStat.index  + ')'}" > 
</select>

提前谢谢

最佳答案

您好,我认为您在表单中遗漏了一些详细信息。通过这个th:object="sale",您可以说出表单的 modelAttribute 是什么,并且要引用该对象的任何属性,只需使用 *{attribute.path}

<form id="sales" action="#" th:action="@{/sales/add}" method="post" th:object="sale">

要引用销售对象的属性,请使用:

<select th:field="*{businessId}" class="form-control"   onchange="submitData()"> <!--- Equipment List --->
<option th:each="e : ${equipmentList}" th:value="${e.id}" th:text="${e.name}"></option>
</select>

关于java.lang.IllegalStateException : Neither BindingResult nor plain target object in ajax call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36305631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com