2012-01-04 4 views
1

私はspring 3 mvcアプリケーションでフォーム検証に問題があります。Spring 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