绑定结果无法正常启动

时间:2018-11-13 16:49:31

标签: java spring spring-mvc spring-boot

我正在使用Spring Boot和验证。当名称的值不存在时,将显示“白色标签错误页面”。我想将其传递给缺少名称的自定义错误的索引页。

控制器类为:

    package com.springs.springs.com.springs.springs.controller;

import com.springs.springs.hibernate.Employee;
import com.springs.springs.hibernate.EmployeeServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;
import java.util.List;

@Controller
@Validated
public class URLController {
    @Autowired
    EmployeeServiceImpl empService;

    @GetMapping({"/", "/index"})
    public String index1(Model model){
        model.addAttribute("employee",new Employee());
        return "index";
    }

    @PostMapping("/result")
    public String result( @ModelAttribute @Valid Employee employee, BindingResult bindingResult){

        List<FieldError> errors = bindingResult.getFieldErrors();
        for (FieldError error : errors ) {
            System.out.println (error.getObjectName() + " - " +error.getDefaultMessage());
        }
        System.out.print(employee.getName()== null); //use a logger instead

        if(bindingResult.hasErrors()){
            return "index";
        }
        else {
            empService.save(employee);
            return "result"; //may want to return a different page name for clarity
        }

    }
}

1 个答案:

答案 0 :(得分:0)

要将错误发送到视图,您只需要将RedirectAttributes作为参数添加到方法中,然后将错误发送到视图。

这种方式:

public String result( @ModelAttribute @Valid Employee employee, BindingResult bindingResult, RedirectAttributes redirectAttributes){

并且:

if(bindingResult.hasErrors()) {
  redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.employee", bindingResult);
        redirectAttributes.addFlashAttribute("employee", employee);
        return "index";
    }

在视图上(也许是JSP),您应该导入de spring taglib并使用:

<spring:hasBindErrors name="employee">
   <form:errors path="*"  />
</spring:hasBindErrors>

这将打印与该对象有关的所有错误消息。

观察:使用

导入spring标签
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
相关问题