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>
我不明白我錯過了什麼。 任何幫助表示讚賞,在此先感謝!
我很感激,你解決了我的問題! – MaVVamaldo 2012-01-05 08:21:09