如何使用BindingResult在Spring中检查特定行是否具有针对多行验证的验证错误

拉加夫

当前逻辑将检查BindingResult是否有错误,并在jsp中显示数据和错误。所需的逻辑是检查每一行的错误,并仅显示包含验证错误的那些行,并更新没有验证错误的行。@Autowired私人IncidentExtractStgService eventExtractStgService;

@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;
拉加夫

由于逻辑上仅显示那些包含验证错误的行,因此将创建一个新的List来存储具有至少一个验证错误的行。

将创建一个新的BindingResult来存储针对新List索引的Errors(如果不执行此操作,则不会针对显示的行显示错误消息)。

下面的逻辑是针对行的每个字段检查字段错误,从jsp中可以看到文件名具有“ incidents [$ {status.index}]。id”。-计数器i获取行数-计数器j用于设置BindingResult的索引。

BeanPropertyBindingResult result2 = new BeanPropertyBindingResult(incidentsForm, bindingResult.getObjectName();

    List<IncidentExtractStg> incidents= new ArrayList<IncidentExtractStg>();
    int i=0;// to get the row count
    int j=0;// to set the index 
    for(IncidentExtractStg ies : incidentsForm.getIncidents()) 
    {    
            int count=0;
            Field[] declaredFields = IncidentExtractStg.class.getDeclaredFields();
            for (Field field : declaredFields) 
            {
                if (bindingResult.hasFieldErrors("incidents["+i+"]."+field.getName()))
                {
                  for (FieldError error: bindingResult.getFieldErrors("incidents["+i+"]."+field.getName()))
                    {
                     result2.addError(new FieldError(error.getObjectName(), "incidents["+j+"]."+field.getName(), error.getRejectedValue(), error.isBindingFailure(), error.getCodes(), error.getArguments(), error.getDefaultMessage()));   
                    }
                 count++;
                }
            }

            if(count>0)
            {
                 j++;
                 incidents.add(ies);    
            }
            else 
            {
                ies.setValidated(1);
                incidentExtractStgService.update(ies);  
            }

        i++;
    }

    i=0;
    j=0;

    if (bindingResult.hasErrors()) {

        incidentsForm.setIncidents(incidents);
        System.out.println("error block");

        for (FieldError error: result2.getFieldErrors()) {
           System.out.println("field errors are  "+error.getField());
           System.out.println("field errors are  "+error);
        }

        redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.incidentsForm", result2);
        redirectAttributes.addFlashAttribute("incidentsForm", incidentsForm);
        return "redirect:/validateIncidentList";
    }       

例如:如果在第30行中,incidents [30] .number字段具有验证错误。然后i = 30并计数> 0且j = 0。

因此,整个行的事件[30]将保存在新初始化的列表的索引0中,并且bindingresult也将添加到索引0中。如果未将J设置为result2并使用bindingresult,则它仍将指向索引30,并且不会针对现在存储在索引0的字段显示错误消息。

现在,此更新的IncidentsForm和result2将被发送到jsp页面,该页面仅显示具有验证错误的行以及相应的错误消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Java Spring在MongoDB中检查特定字段是否具有特定值?

如何使用Java Spring在MongoDB中检查特定字段是否具有特定值?

如何验证模型,是否具有特定的列?

如何声明 If 以验证类是否具有特定属性?

如何使用jQuery验证插件检查特定字段是否有效?

如何使用archunit验证方法注释是否正在使用具有特定值的属性

如何在持久化之前使用Hibernate验证的内部@Entity类中的Spring BindingResult异常处理

从DBMS方面是否有一种方法可以验证表中是否已检查“布尔”列(真),但仅针对行的子集

如何使用Spring JUnit集成测试检查数组中的每个对象是否具有特定属性?

PHP Laravel 5制定验证器规则以检查是否存在具有特定类型的帐户

如何使用Java中的Optional检查是否为null以及是否具有特定值?

如何检查Spring Boot应用程序是否在自动配置类中具有特定注释

如何在R或Excel中检查特定列的行是否具有相同的符号?

如何验证映射字段在Ecto模型中(而不是在控制器中)是否具有特定键?

如何检查用户在Meteor中是否具有特定角色

如何针对自身以及数据库中的现有行验证多个实体?

如何检查结果集是否具有一行或更多行?

Symfony2-检查用户是否在身份验证中具有角色

检查具有自定义验证约束的数据库中是否存在条目

流利的验证程序,以检查数据库中是否存在具有ID的实体

是否可以验证扫描仪以检查它是否具有相同特定值的最小值 (x)?

Spring MVC如何记录BindingResult中的所有错误

如何在技术上匹配的行之间进行比较,并在特定列中验证两者之间是否具有“ OptionA”和一个具有“ OptionB”?

将JSR-303验证错误转换为Spring的BindingResult

如何使用VBA检查excel表中的行是否具有某些值

C#错误“特定的强制转换无效。” 即使通过检查objectToCast是否为ExpectedType验证它是否有效

bash +如何验证字符串/单词是否具有某些特定的字符

如何检查或验证 URL 是否存在 - 返回 CORS 错误?

使用正则表达式验证iframe src是否具有特定的网址