2012-07-01 5 views
0

SimpleFormController을 사용하여 Validator 인터페이스와 Spring MVC 3.0.2를 사용하여 양식의 유효성을 검사합니다. 다음은 확장 컨트롤러 클래스 SimpleFormController입니다.Validator 인터페이스를 사용하는 동안 showForm()에 오류 메시지가 표시되지 않습니다.

@SuppressWarnings("deprecation") 
final public class Temp extends SimpleFormController 
{   
    public Temp() 
    { 
     setCommandClass(ValidationForm.class); 
     setCommandName("validationForm"); 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception 
    { 
     ValidationBean validationBean=(ValidationBean) command; 
     ModelAndView mv=new ModelAndView("Temp", "validationForm", validationBean); 
     if(errors.hasErrors()) 
     { 
      System.out.println("error"); 
     } 
     else 
     { 
      System.out.println("name = "+validationBean.getUserName()); 
     } 
     return mv; 
    }   

    @Override 
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception 
    { 
     ModelAndView mv=new ModelAndView("Temp", "validationForm", errors.getTarget()); 
     return mv; 
    } 
} 

양식 검증에 대해서는 의문의 여지가 없습니다. 그것은 잘 작동합니다. 여기서 유일한 질문은 위와 같이 showForm(...){...} 메서드를 사용할 때 JSP 페이지가로드 될 때이 메서드가 호출되고 onSubmit() 메서드가 완료된 후에도 오류 메시지가 표시되지 않는다는 것입니다 (이 경우 페이지를 클릭하여 전송할 수 있습니다 JSP 페이지의 제출 버튼).

페이지가 제출 버튼을합니다 ( onSubmit() 방법 다음에 호출 됨) showForm() 방법 errors.getTarget() (또는 getCommand(request))는 명령 개체를 클릭하여 제출

는 오류 메시지가 페이지에 표시되지 않습니다에 포함되어 있습니다. 명령 개체 (또는 도메인 개체)는 onSubmit() 메서드의 명령 개체와 다릅니다. (따라서 showForm() 메서드가 주석 처리 될 때 오류 메시지가 표시됩니다.)

showForm() 메서드를 사용하여 페이지가 전송되거나로드 될 때 데이터베이스의 데이터 목록을 표시해야합니다.

물론 아래와 같이 referenceData() 방법이 트릭을 수행합니다.

protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception 
{  
    Map map=new HashMap(); 
    return map; 
} 

그러나 나는 showForm() 방법을 고수하고 싶습니다. 양식의 유효성을 검사하는 동안 showForm() 메서드를 사용하는 동안 오류 메시지를 표시하는 방법이 있습니까?

답변

1

클라이언트 측에서는 오류 개체의 내용을 사용하여 오류와 함께 양식을 표시 할 수 있습니다. onSubmit() 및 showForm()은 봄 3.0에서 더 이상 사용되지 않습니다.

@SuppressWarnings("deprecation") 
final public class Temp extends SimpleFormController 
{   
    public Temp() 
    { 
     setCommandClass(ValidationForm.class); 
     setCommandName("validationForm"); 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception 
    { 
     ValidationBean validationBean=(ValidationBean) command; 
     ModelAndView mv=new ModelAndView("Temp", "validationForm", validationBean); 
     if(errors.hasErrors()) 
     { 
      System.out.println("error"); 
      errors.reject("error.server.error"); 
      return showForm(request, response, errors); 
     } 
     else 
     { 
      System.out.println("name = "+validationBean.getUserName()); 
     } 
     return mv; 
    }   

    @Override 
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception 
    { 
     ModelAndView mv=new ModelAndView("Temp", "validationForm", errors.getTarget()); 
     return mv; 
    } 
} 

샘플 JSP 코드 :

<span class="error">${error}</span> 

오류가 우리가 설정해야 할 속성은 다음과 같습니다 당신이 오류 메시지를 표시해야하는 경우처럼

JSP의 예를 들어 당신이 사용할 수있는 봄.

+0

많은 노력에 감사드립니다. 유감스럽게도, 나는 그것을 시도했지만 직접적으로 일하지 않았다. 나는 클라이언트 측에서'error' 객체를 사용하는 방법을 모른다. 나는'showForm' 메소드를 고집 했음에도 불구하고,'showForm()'메소드 대신에'referenceData()'메소드를 사용하고 있습니다. 그래서'error' 객체를 사용하여 클라이언트 측에서 오류 메시지를 표시하는 방법을 설명해 주시면 매우 감사드립니다. 그러나 나는 당신의 대답을 받아들이는 것을 잃을 것이 없습니다 (그것이 나에게 맞는 것처럼 보입니다). 다시 한번 감사드립니다. – Tiny

관련 문제