gpt4 book ai didi

model-view-controller - Spring 3 MVC : Show validation message with custom validator

转载 作者:IT老高 更新时间:2023-10-28 13:52:48 30 4
gpt4 key购买 nike

我需要帮助。我是jsp,MVC的初学者。我想在 Spring 3 MVC 中使用自定义验证器验证表单输入。

我的验证器类

   package validators;

import models.UserModel;

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
@Component
public class UserValidator implements Validator {

@Override
public boolean supports(Class clazz) {
return UserModel.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstname", "Enter firstname.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname", "Enter surname.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "login", "Enter login.");

}

}

Controller 类

package controllers;

import java.util.ArrayList;
import models.UserModel;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import validators.UserValidator;
import database.UserDB;


@Controller
public class UserController {

@RequestMapping(value="pouzivatel/new", method=RequestMethod.POST)
public ModelAndView newUser(@ModelAttribute UserModel user, BindingResult result){
UserValidator validator = new UserValidator();
validator.validate(user, result);
if(result.hasErrors()){
return new ModelAndView("/user/new","command",user);

}
...
}

用户模型

package models;

public class UserModel {
private String firstname="";
private String surname="";

public String getFirstname() {
return firstname;
}
public String getSurname() {
return surname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}
public void setSurname(String surname) {
this.surname = surname;
}

}

JSP veiw new.jsp 位于目录/web-inf/user 中(它只是形式)

<form:form method="post" action="new.html">
<fieldset>
<table>
<tr>
<td>
<form:label path="firstname">FirstName</form:label>
</td>
<td>
<form:input path="firstname" />
<form:errors path="firstname" />
</td>
</tr>
<tr>
<td>
<form:label path="surname">Surname</form:label>
</td>
<td>
<form:input path="surname" />
<form:errors path="surname" />
</td>
</tr>
</table>
</fieldset>
<div>
<button type="submit" id="btOk">Ok</button>
</div>
</form:form>

调度程序 servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="controllers" />
<context:component-scan base-package="validators" />

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

</beans>

问题是 View 中的显示验证消息。验证成功并且在变量resut (BindingResult) 中是错误的。 Controller 返回跟随部分代码

if(result.hasErrors()){
return new ModelAndView("/user/new","command",user);

另一种方法是使用注释验证(我更喜欢自定义验证器),但是当输入字段为空时,为什么我看不到验证消息。

你能给我举个例子吗?

感谢回复。

最佳答案

这是因为 View 和 Controller 中的默认模型属性名称不匹配:

  • 当你写 <form:form>没有 modelAttribute (或 commandName )属性,它使用默认模型属性名称 command .
  • 当你写 @ModelAttribute UserModel user在您的 Controller 中,它假定此属性的名称是一个非大写的类名,即 userModel .

也就是说,验证器产生的错误消息绑定(bind)到名为 userModel 的模型属性。 ,而您的 View 试图显示模型属性的错误 command .

您需要在 View (<form:form modelAttribute = "userModel" ...>) 或 Controller (@ModelAttribute("command")) 中显式设置模型属性名称。

关于model-view-controller - Spring 3 MVC : Show validation message with custom validator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031266/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com