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