Spring mvc-带有@ModelAttribute的POST请求会导致不必要的sql查询
我有一个带有三个select输入的表单,它们是从视图中的db添加的。一切正常,用户可以为每次选择进行选择。问题是,当我提交表单时,@ModelAttribute生成的查询与GET请求相同,当这三个select被添加到视图中时,select字段在POST之后为空Spring mvc-带有@ModelAttribute的POST请求会导致不必要的sql查询,spring,spring-mvc,modelattribute,Spring,Spring Mvc,Modelattribute,我有一个带有三个select输入的表单,它们是从视图中的db添加的。一切正常,用户可以为每次选择进行选择。问题是,当我提交表单时,@ModelAttribute生成的查询与GET请求相同,当这三个select被添加到视图中时,select字段在POST之后为空 @GetMapping("/road-assistance") public String viewPage(Model model, Locale locale) { model.addAttribute("roadAssis
@GetMapping("/road-assistance")
public String viewPage(Model model, Locale locale) {
model.addAttribute("roadAssistanceDto", roadAssistanceService.createRoadAssistanceDto(locale, null));
return "admin/roadassistance/view";
}
@PostMapping("/road-assistance")
public String createRoadAssistance(Model model, Locale locale,
final @Valid @ModelAttribute("roadAssistanceDto") RoadAssistanceDto roadAssistanceDto,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "redirect:/";
}
return "admin/roadassistance/view";
}
为什么@PostMapping会生成相同的查询,而我在视图/模型中没有这些信息
景色-
<div class="row card-pagging">
<div class="col-sm-2 mt-3 offset-sm-2">
<label data-th-text="#{control.panel.roadassistance.country}"
class="control-label"
for="country">Country</label>
<select id="country" data-th-field="*{country}" class="form-control">
<option data-th-each="countryList : ${roadAssistanceDto.countryList}"
data-th-value="${countryList.id}"
data-th-text="${countryList.countryI18n[#locale].name}"></option>
</select>
</div>
<div class="col-sm-3 mt-3">
<label data-th-text="#{control.panel.roadassistance.region}" class="control-label"
for="region">Region</label>
<select data-th-field="*{region}" id="region" class="form-control">
<option value='' data-th-text="#{control.panel.roadassistance.chooseregion}"></option>
<option data-th-each="reg : ${roadAssistanceDto.regionList}" data-th-value="${reg.id}"
data-th-text="${reg.regionI18n[#locale].name}"></option>
</select>
</div>
<div class="col-sm-3 mt-3">
<label data-th-text="#{control.panel.roadassistance.city}" class="control-label"
for="region">City</label>
<select data-th-field="*{city}" id="city" class="form-control">
<option value="" data-th-text="#{control.panel.roadassistance.chooseregion}"></option>
<option data-th-each="city : ${roadAssistanceDto.cityList}" data-th-value="${city.id}"
data-th-text="${city.cityI18n[#locale].name}"></option>
</select>
</div>
</div>
还有道路助理-
public class RoadAssistanceDto implements Serializable {
private Long id;
private Country country;
private Region region;
private City city;
private List<Country> countryList;
private List<Region> regionList;
private List<City> cityList;
/* GETTERS AND SETTERS /*
}
嗯。。。我想我注意到了这个问题。。当我绑定胸腺中的字段时,有一些东西在工作。。。但无论如何,为什么要生成这些查询?请添加一些查看表单代码!添加roadAssistanceDto的代码@DariushJafari不可以只设置一个断点,然后检查调用堆栈,看看调用发生的原因。即使有一些文档确切地解释了@modeldattribute是如何工作的,我还是更喜欢调试方法——代码从不说谎:在文档中查找一种可能是方法参数上的@modeldattribute,这表明应该从模型中检索参数。如果模型中不存在参数,则应首先实例化该参数,然后将其添加到模型中。