2016-06-08 7 views
0

전자 메일이 포함 된 Spring Bean의 유효성을 검사하려고하지만 유효성 검사기 나 BindingResult는 요청 빈의 전자 메일이 빈 문자열로 제공 될 때 오류를 표시하지 않습니다.스프링 BindingResult 또는 유효성 검사기가 왜 오류를 표시하지 않는 이유는 무엇입니까?

콩 : , 다음 코드를 참조하십시오

import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 
import org.springmodules.validation.bean.conf.loader.annotation.handler.Email; 
import org.springmodules.validation.bean.conf.loader.annotation.handler.NotEmpty; 

@Component("grouponRedemptionFormBean") 
@Scope("prototype") 
public class GrouponRedemptionBean { 

@NotEmpty(message = "Please enter your email addresss.") 
@Email(message = "Please correct your email.") 
private String email; 
    … 
} 

컨트롤러 :

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.validation.Valid; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BeanPropertyBindingResult; 
import org.springframework.validation.BindingResult; 
import org.springframework.validation.Errors; 
import org.springframework.validation.Validator; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 


@Controller 
public class GrouponVoucherRedemptionController { 

@Autowired 
@Qualifier("defaultBeanValidator") 
private Validator validator; 

@RequestMapping(value="/groupon-redemption.ep", method=RequestMethod.POST) 
public String PostGrouponRedemption(@Valid @ModelAttribute GrouponRedemptionBean grouponRedemptionBean, BindingResult bindingResult, 
HttpServletRequest request, HttpServletResponse response, Model model){ 

    Errors errors = new BeanPropertyBindingResult(grouponRedemptionBean, "grouponRedemptionFormBean"); 
    validator.validate(grouponRedemptionBean, errors); 
    if(errors.hasErrors()) { 
     bindingResult.addAllErrors(errors); 
    } 
    if (bindingResult.hasErrors()) { 
     return GROUPON_REDEMPTION_VIEW; 
    }  
... 

XML 구성 :

<mvc:annotation-driven /> 

답변

2

당신은 잘못된 인수 순서가 - BindingResult 즉시해야합니다 모델 객체 뒤에 (귀하의 경우에는).

Errors 또는 BindingResult 매개 변수 그래서 그들 각각에 대해 별도의 BindingResult 인스턴스를 만듭니다 개 이상의 모델 객체와 봄을 수있는 방법 서명으로 즉시 구속되고있는 모델 객체를 수행 할 필요가 다음 documentation 참조 다음 샘플은 작동하지 않습니다.

BindingResult 및 @ModelAttribute의 순서가 잘못되었습니다. PetBindingResult 사이에서 Model 파라미터가 있다는

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { ... } 

참고. 다음과 같이 매개 변수의 순서를 당신이 가지고 작업 내용 :

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result, Model model) { ... } 
+1

내가 BindingResult의 위치를 ​​변경하고 검사기를 추가 - 결과는 프로젝트 작업에서 같은 –

+0

수행 다른 검증인가? – Roman

+0

무슨 소리 야? –