2015-02-19 1 views
0

У меня есть компонент, который имеет некоторые атрибуты с аннотациями для определенных полей.
Я использую этот компонент два раза
Впервые мне нужно использовать функцию bindingResult.hasError для всех атрибутов (без проблем).
Во второй раз я просто хочу использовать функцию bindingResult.hasError по четырем атрибутам (соответствует четырем полям, которые отображаются моим JSP), но он не работает, потому что функция bindingResult.hasError обнаруживает ошибки в других полях в компоненте
java bindingResult hasError function

Мой боб:

private String region; 
@NotBlank 
private String zone; 
@NotBlank 
private String country; 
@NotBlank 
private String site; 
private Long siteId; 
@NotNull 
private Long statusId; 
private String status; 
@NotBlank 
private String linkName; 
@NotNull 
private Long linkTypeId; 
private String linkType; 
private Integer downloadLineBw; 
private Integer downloadPortBw; 
private String technology; 
@ValidDate 
private String installDate; 
private String maintenanceInfo; 
private String internetConfiguration; 
@NotNull 
private Long linkRoleId; 
private String linkRole; 
private Long contractOwnerId; 
private String contractOwner; 
private Integer uploadPortBw; 
private Integer uploadLineBw; 
private Long yearlyCost; 
@ValidDate 
private String endDate; 
private String supplier; 
private Long ismCost; 
private Long oneTimeCost; 
private String linkedService; 

Мой контроллер:

@RequestMapping(method = RequestMethod.POST) 
public String findLinksByCriteria(@Valid LinkForm link, BindingResult bindingResult, Model uiModel) { 
    if (isCriteriaEmpty(link)) { 
     uiModel.addAttribute("criteriaEmptyWarning", "error_search_criteria_empty"); 
     return ViewConstants.LINK_SEARCH_VIEW; 
    } 
    if (bindingResult.hasErrors()) { 
     return ViewConstants.LINK_SEARCH_VIEW; 
    } 
    ... 
} 

часть моего JSP:

 <tr> 
      <td class="label"><spring:message code="link.site" /></td> 
      <td class="value"><form:input path="site" cssClass="x-form-text" /></td> 

      <td class="label"><spring:message code="link.type" /></td> 
      <td class="value"><form:input path="linkType" cssClass="x-form-text" /></td> 
     </tr> 
     <tr> 
      <td class="label"><spring:message code="link.installDate" /></td> 
      <td class="value"> 
       <form:input path="installDate" cssClass="datepickerMe" /> 
       <form:errors path="installDate" cssClass="errormsg" /> 
      </td> 


      <td class="label"><spring:message code="link.EndDate" /></td> 
      <td class="value"> 
       <form:input path="endDate" cssClass="datepickerMe" /> 
       <form:errors path="endDate" cssClass="errormsg" /> 
      </td> 
     </tr> 

ответ

0

Можно создать настраиваемую пружину валидатор, так что вы можете определить атрибуты ведьм должны быть проверены:

@Controller 
public class MyController { 

    @Autowired 
    private MyFormValidador formValidador; 

    @InitBinder 
    private void initBinder(WebDataBinder binder) { 
     binder.setValidator(formValidador); 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String execute(@Valid MyForm form, BindingResult result, Model model) { 
     if (result.hasErrors()) { 
      return "errorview"; 
     } 

     return "successview"; 
    } 

} 

@Component 
public class MyFormValidador implements Validator { 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return MyForm.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 
     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "linkName", "linkName.required", "Link name must be informed"); 
    } 

} 
+0

Спасибо за ответ. Знаете ли вы, что лучше создать пользовательский весовой валидатор или новый компонент java для моей формы? –

+0

Я лично предпочитаю дублировать форму, так как цель класса станет более понятной и удобной в обслуживании (например, 'CreateLinkForm',' EditLinkForm') –

+0

Я выбрал именно такой вариант. Спасибо за помощь –

0

Весной, BindingResult ищет полные ошибки объекта, вы не можете проверить ошибки для частичного объекта (несколько полей в объекте).

В объекте, если какая-либо одна проверка не удалась, тогда bindingResult.hasError() вернет true, поэтому проверка для объекта не выполнена. bindingResult.hasError() будет false, только если все проверки в объекте выполнены.

Его вид создания таблицы БД со столбцами NOT NULL свойство и попытка вставить значение NULL для этих столбцов.