JSR-303 ошибки проверки на сущности не отображаются в JSP

1

У меня есть следующая сущность, которая должна быть проверена, когда ввод вводится в формы. Я вижу, когда есть ошибки, он просто возвращается в ту же форму (которая предназначена), но не отображает сообщения об ошибках при получении свойств, аннотированных в сущности. У меня есть {<mvc: annotation/>}

в сервлете моего отчуждённого

package com.web.portal.entity;

import java.io.Serializable;


import org.hibernate.validator.Pattern;
import org.hibernate.validator.Size;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Email;

@Entity
@Table(name = "faculty")
public class Faculty implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private int id;

    private byte[] image;

    private String firstName;

    private String lastName;

    private String description;

    private String email;

    private String phone;

    private String research;
    private byte[] map;

    @GeneratedValue
    @Id
    @Column(name = "id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "image")
    public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

    @NotBlank(message = "Field value should not be null")
    @Column(name = "first_name")
    @Pattern(regex = "[a-z-A-Z]*", message = "First name has invalid characters")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "last_name")
    @NotBlank(message = "Field value should not be null")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name = "description")
    @NotBlank(message = "Field value should not be null")
    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Column(name = "email")
    @NotBlank(message = "Field value should not be null")
    @Email(message = "You provided an invalid email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Size(min = 10, max = 10, message = "Size should be ten : 4537653456")
    @Column(name = "phone_number")
    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Column(name = "research")
    public String getResearch() {
        return research;
    }

    public void setResearch(String research) {
        this.research = research;
    }

    @Column(name = "location_map")
    public byte[] getMap() {
        return map;
    }

    public void setMap(byte[] map) {
        this.map = map;
    }

}

И мой контроллер:

package com.web.portal.controller;

import java.util.Map;

import javax.validation.Valid;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.web.portal.entity.Faculty;
import com.web.portal.service.FacultyService;

@Controller
public class AdminManagerController {
    private static final Logger LOG = Logger.getLogger(AdminManagerController.class);
    @Autowired
    FacultyService service;

    public FacultyService getService() {
        return service;
    }

    public void setService(FacultyService service) {
        this.service = service;
    }

    @RequestMapping(value = "/manager.do")
    public String facultyLists(Map<String, Object> map) {
        Faculty faculty = new Faculty();
        map.put("facultyList", service.getList(faculty));
        return "faculty_and_staff";
    }

    @RequestMapping(value = "/fillInformation.do", method = RequestMethod.GET)
    public String fillFaculty(ModelMap model) {
        model.addAttribute("faculty", new Faculty());
        return "add_faculty_info";
    }

    @RequestMapping(value = "/addFaculty.do", method = RequestMethod.POST)
    public String addFaculty(@Valid Faculty faculty, BindingResult result, Map model) {

        if (result.hasErrors()) {
            return "redirect:/fillInformation.do";
        } else {
            service.addFaculty(faculty);
            return "redirect:/manager.do";
        }
    }

}

И я использую проверку javax. Мой jsp:

<body>
<div class="container">
<div class="login">
<h1>Add Faculty</h1>
<form:form method="POST" action="addFaculty.do"  commandName="faculty">
<form:errors path="*" /> 
 <table>
<tr>
    <td><form:label path="image"></form:label>Picture</td>
    <td><form:input path="image" placeholder="" accept="image/*" type="file"/></td>

  </tr>
  <tr>
    <td><form:label path="firstName"></form:label> Firstname</td>
    <td><form:input path="firstName" placeholder=""/></td>
Теги:
spring
spring-mvc
bean-validation

3 ответа

0

Проблема заключается в "перенаправлении". Сообщения об ошибках проверки помещаются для запроса атрибутов, но атрибуты запроса не сохранится с перенаправлением

if (result.hasErrors()) {
    return "redirect:/fillInformation.do";
}

удалите redirect: и проверьте

0

Я думаю, вы должны поместить @NotBlank, @Email и т.д. Аннотации проверки над свойствами вместо своих методов getter. Игнорировать, если я ошибаюсь.

0

В вашей Jsp вы должны иметь <form:error path="image"/>. Когда есть ошибка в <form:input path="image"/>, она появится в <form:error>.

Следуйте этому руководству: http://www.mkyong.com/spring-mvc/spring-mvc-form-errors-tag-example/

  • 0
    Спасибо за ответ CodeBender. Если вы посмотрите на мой JSP, у меня есть подстановочный знак <form: errors path = "*">. Это должно поймать все ошибки на пути.
  • 0
    Ах, мой плохой. Должна ли быть модель Model в параметре метода контроллера, затем использовать model.addAttribute ("faculty", faculty) перед перенаправлением обратно в jsp?
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню