2012-01-04 3 views
1

스프링 3 mvc 응용 프로그램에서 폼 유효성 검사에 문제가 있습니다.스프링 3 폼 검사기

모든 것이 설정되어 있지만 잘못된 입력란이 양식 필드에 입력되면 유효성 검사기가이를 감지하고 오류 메시지가 표시되지 않습니다.

여기 검증

@Component 
public class SettingsValidator implements Validator{ 

@Override 
public boolean supports(Class<?> clazz) { 
    return VrSettings.class.isAssignableFrom(clazz); 
} 

@Override 
public void validate(Object target, Errors errors) { 

    ValidationUtils.rejectIfEmpty(errors, "applicationBaseUri", "field.required", "field required"); 
    ValidationUtils.rejectIfEmpty(errors, "remoteDnsServiceUri","field.required", "field required"); 

    VrSettings settings = (VrSettings) target; 
    try 
    { 
     URI uri = new URI(settings.getApplicationBaseUri()); 
    } 
    catch (URISyntaxException e) 
    { 
     errors.rejectValue("applicationBaseUri", "error.invalid.uri", "invalid uri"); 
    } 
    try 
    { 
     URI uri = new URI(settings.getLocalApplicationBaseURI()); 
    } 
    catch (URISyntaxException e) 
    { 
     errors.rejectValue("localApplicationBaseURI", "error.invalid.uri", "invalid uri"); 
    } 
    try 
    { 
     URI uri = new URI(settings.getRemoteDnsServiceUri()); 
    } 
    catch (URISyntaxException e) 
    { 
     errors.rejectValue("remoteDnsServiceUri", "error.invalid.uri", "invalid uri"); 
    } 

} 

}

컨트롤러 ...

@Controller 
public class UserInterfaceController { 

@InitBinder 
protected void initBinder(WebDataBinder binder) 
{ 
    binder.setValidator(new SettingsValidator()); 
} 


@RequestMapping(method=RequestMethod.POST, value="ui/settings") 
public ModelAndView postSettings(@ModelAttribute("settings") @Valid VrSettings settings, BindingResult result) 
{ 
    ModelAndView mav = new ModelAndView("settings"); 
    mav.addObject("settings", settings); 
    if(result.hasErrors()) 
    { 
     mav.addAllObjects(result.getModel()); 
     return mav; 
    } 

    LinkedList<VrSettings> vrSettingsList = persistenceManager.getAll(new VrSettings()); 
    if(vrSettingsList.isEmpty()) 
    { 
     //do things 
    } 
    else 
    { 
       //do things 
    } 

    return mav; 
} 

} 

마지막으로 JSP

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 

입니다

<h3>Configuration Parameters</h3> 

     <span style="font-weight:bold; color: red"> 
      <form:errors path="*" /> 
     </span><br /> 
    <div class="form"> 
    <form:form method="post" action="settings" commandName="settings"> 

      <form:label for="baseuri" path="applicationBaseUri">base URI*</form:label> 
      <form:input class="text" path="applicationBaseUri" size="35" name="baseuri"/> 

      <form:label for="localbaseuri" path="localApplicationBaseURI">local base URI</form:label> 
      <form:input class="text" path="localApplicationBaseURI" size="35" name="localbaseuri"/> 

      <form:label for="ldns" path="remoteDnsServiceUri">ldns URI*</form:label> 
      <form:input class="text" path="remoteDnsServiceUri" size="35" name="ldns"/> 

      <div class="form-row"> 
       <input type="submit" value="submit"/> 
      </div> 

    </form:form> 
    </div> 

</body> 

나는 내가 부족 무엇인지 이해할 수 없습니다. 도움을 주신다면 감사드립니다.

답변

2
<form:errors path="*" /> 

작동해야하는 명령 개체를 알아야합니다. 그래서 명령 개체에 대한 BindingResult를 찾을 수 없기 때문에 org.springframework.web.servlet.tags.form.ErrorsTag에 대한 org.springframework.web.servlet.tags.form.AbstractHtmlElementBodyTag.shouldRender() 그냥 SKIP_BODY을 반환이 방법없이

<form:form method="post" action="settings" commandName="settings"> 

내부에이 태그를 이동합니다.

+0

매우 감사드립니다. 내 문제를 해결했습니다. – MaVVamaldo