Как показать сообщение об ошибке из реализованного пользовательского валидатора в представлении JSP? - PullRequest
0 голосов
/ 26 марта 2019

Я пишу пользовательский валидатор. Следует просто сравнить 2 значения поля в форме и отклонить, если они совпадают. Он успешно отклоняет, но я не могу отправить свое сообщение об ошибке для просмотра.

Это мой пользовательский класс валидатора:


public class CheckSameNameValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        // TODO Auto-generated method stub
        return FormModel.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        FormModel model = (FormModel) target;
        if (model.getPerson1().getName().equals(model.getPerson2().getName())) {
            System.out.println("error occurred");
            errors.reject("person can not relate to himself!");
        }
    }

}

Это класс FormModel, используемый при проверке:

public class FormModel {
    private Person person1;
    private Person person2;

    public Person getPerson1() {
        return person1;
    }

    public void setPerson1(Person person1) {
        this.person1 = person1;
    }

    public Person getPerson2() {
        return person2;
    }

    public void setPerson2(Person person2) {
        this.person2 = person2;
    }
}

Используется метод контроллера:

@RequestMapping(value = "/setRelative", method = RequestMethod.POST)
    public ModelAndView setRelative(@Valid @ModelAttribute("people") FormModel people, BindingResult bindingResult,
            HttpServletRequest request) {
        logger.info("set relative controller");
        CheckSameNameValidator validator = new CheckSameNameValidator();
        validator.validate(people, bindingResult);
        if (bindingResult.hasErrors()) {
            ModelAndView model = new ModelAndView();
            model.setViewName("index");
            model.addObject("people", people);
            return model;
        } else {
  }
}

А это форма в jsp:

<f:form class="form-inline" action="setRelative"
    modelAttribute="people">

    <label>Person:</label>
    <f:select cssStyle="width:150px" path="person1.name" items="${nameList}"
            multiple="false">
        </f:select> 
        <f:errors path="person1.name" class="alert alert-danger"></f:errors>

    <f:label path="person2.name">Relative:</f:label>
    <f:select cssStyle="width:150px" path="person2.name" items="${nameList}"
            multiple="false">
        </f:select> 
        <f:errors path="person2.name" class="alert alert-danger"></f:errors>

        <label>Person's Relation to Relative:</label>
    <f:select cssStyle="width:150px" path="person2.relations"
        items="${relationList}" multiple="false"> 
    </f:select>
    <button class="btn btn-primary" type="submit">Set
        relative</button>

</f:form>

Я ожидаю, что сообщение об ошибке будет напечатано в виде, если произошла ошибка. Как этого добиться?

1 Ответ

1 голос
/ 26 марта 2019

Вы можете добавить это сообщение в контроллер model.addObject("message", "your error message"); а затем вставьте jsp ${message} туда, где вы хотите его показать.

Это еще один вариант, чтобы напечатать сообщение в jsp. Я надеюсь, вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...