Текущая логика проверяет наличие ошибок BindingResult и отображение данных и ошибок в jsp. Необходимая логика - это проверка ошибок для каждой строки и отображение только тех строк, содержащих ошибки проверки, и обновление строк, которые не имеют ошибок проверки. @Autowired частный инцидент IncidentExtractStgServiceExtractStgService;Как проверить, имеет ли определенная строка ошибку проверки для проверки нескольких строк весной, используя BindingResult
@RequestMapping(value = "/validatingIncidentList", method = RequestMethod.POST)
public String ValidateIncidentList(@Valid @ModelAttribute("incidentsForm") IncidentsForm incidentsForm,
BindingResult bindingResult,RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
for(ObjectError error: bindingResult.getAllErrors()){
System.out.println(error);
}
redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.incidentsForm", bindingResult);
redirectAttributes.addFlashAttribute("incidentsForm", incidentsForm);
return "redirect:/validateIncidentList";
}
else
{
for(IncidentExtractStg ie : incidentsForm.getIncidents()) {
ie.setValidated(1);
incidentExtractStgService.update(ie);
System.out.println(ie.getNumber()+" "+ie.getWaitTime());
}
return "redirect:/validateIncidentList";
}
Ниже фрагмент кода будет проверять, если модель содержит атрибут «incidetsForm», если так будет посылать то же самое example.jsp, который в свою очередь будет отображать данные и ошибки проверки.
@RequestMapping(value = "/validateIncidentList", method = RequestMethod.GET)
public String incidentList(Model model) {
if (!model.containsAttribute("incidentsForm")) {
List<IncidentExtractStg> incidents = incidentExtractStgDao.validateList();
incidentsForm.setIncidents(incidents);
model.addAttribute("incidentsForm", incidentsForm);
return "example";
}
model.addAttribute("errormessage","Please Check the Validation Errors column for Errors");
return "example";
}
Example.jsp фрагмент кода
<c:forEach var="ie" items="${incidentsForm.incidents}" varStatus="status">
<tr>
<td><form:input path="incidents[${status.index}].id" value="${ie.id}" readonly ="true"/></td>
<td><form:errors path="incidents[${status.index}].id" cssClass="error" /></td>
<td><form:input path="incidents[${status.index}].number" value="${ie.number}"/></td>
<td><form:errors path="incidents[${status.index}].number" cssClass="error" /></td>
</tr>
IncidentsForm.java:
import java.util.List;
import javax.validation.Valid;
import com.infosys.sla.model.IncidentExtractStg;
public class IncidentsForm {
@Valid
private List<IncidentExtractStg> incidents;
public List<IncidentExtractStg> getIncidents() {
return incidents;
}
public void setIncidents(List<IncidentExtractStg> incidents) {
this.incidents = incidents;
}
}
IncidentExtractStg.java фрагмент
@Entity
@Table(name="incident_extract_stg")
public class IncidentExtractStg {
@Id
@Column(name="ies_id")
private int id;
@NotBlank(message="number cannot be empty")
@Pattern(regexp="[A-Za-z0-9]*",message="number can contain only alphabets and numbers")
@Column(name="ies_number")
private String number;
Вы можете найти логику, необходимую для ваших нужд внутри вопроса или ответов этой темы: http://stackoverflow.com/questions/25326591/spring-mvc-controller-how-to-keep-bindingresult-errors- while-emptying-the-form – ThierryB