【问题标题】:Data not get bind with the Binding result in Spring mvc数据未与 Spring mvc 中的绑定结果绑定
【发布时间】:2026-01-19 13:45:02
【问题描述】:

过去 2 天我一直面临这个问题。尽管我浏览了很多帖子,但我没有找到解决问题的方法。

实际上,我正在尝试使用 Spring 验证来验证我的 login 表单,但即使我输入了一些错误的输入,它也不会显示任何错误,它会接受我的每个输入。

例如,我对电子邮件使用了@NotEmpty 和@Email 注释,它甚至接受我的普通输入,例如“用户”。 它必须将错误作为“无效的电子邮件格式”抛出但此错误不会绑定到我的 Bindingresult 中。

我的控制器:ContactController.java

import java.util.ArrayList;
import java.util.List;
import net.viralpatel.spring3.form.loginform;

import javax.validation.Valid;

import net.viralpatel.spring3.form.Contact;
import net.viralpatel.spring3.form.ContactForm;
import net.viralpatel.spring3.form.loginform;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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;@Controller{
@RequestMapping(value = "/get", method = RequestMethod.GET)
    public String get(ModelMap model) {
        loginform ud = new loginform();
         ud.setUser("");
         ud.setEmail("");
        model.addAttribute("lform",ud);
        return "login"; 

    }

    @RequestMapping(value="/login",method=RequestMethod.POST)
    public String loginCheck(@ModelAttribute("lform") @Valid loginform lform, BindingResult result, ModelMap model) {

        if (result.hasErrors()) {
            return "login";
        } else {
            model.addAttribute("lfobj", lform);
            return "success";        

        }
    }

我的 login.jsp 文件:

<form:form action="login.html" commandName="lform">
<table>
<tr>
    <td><font face="verdana" size="2px">User</font></td>
    <td>:</td>
    <td>
    <font face="verdana" size="2">
    <form:input path="user" /> <form:errors path="user"></form:errors>
    </font>
    </td>
</tr>
<tr>
    <td><font face="verdana" size="2px">Email</font></td>
    <td>:</td>
    <td>
    <font face="verdana" size="2">
    <form:input path="email" /> <form:errors path="email"></form:errors>
    </font>
    </td>
</tr>
<tr>
    <td><font face="verdana" size="2px">Phone</font></td>
    <td>:</td>
    <td>
    <font face="verdana" size="2">
    <form:input path="phone" /> <form:errors path="phone"></form:errors>
    </font>
    </td>
</tr>
<tr>
    <td><font face="verdana" size="2px">Blog</font></td>
    <td>:</td>
    <td>
    <font face="verdana" size="2">
    <form:input path="blog" /> <form:errors path="blog"></form:errors>
    </font>
    </td>
</tr>
<tr>
    <td>
    <input type="submit" value="Submit" />
    </td>
</tr>
</table>
</form:form>

我的 loginform.java :

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.URL;
import org.springframework.validation.BindingResult;

public class loginform{

        @NotEmpty
        private String user;

        @NotEmpty
        @Email
        private String email;        

        @NotEmpty(message = "Phone should not be blank.")
        @Size(min = 10,max = 10)
        private String phone;

        @NotEmpty(message = "Enter your blog URL")
        @URL
        private String blog;
//get & set methods
 }

我的 spring-servlet.xml :

<context:annotation-config />
    <context:component-scan base-package="net.viralpatel.spring3.controller" /> 

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

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
       <property name="basename" value="props" />
    </bean>

这是我在 Spring 验证中的第一个程序,所以可能我的成绩很低,但请为我的问题提供任何解决方案。

【问题讨论】:

  • 做一件事定义正则表达式然后检查。 :)
  • 您使用的是哪个版本的 spring,并发布您的 spring 配置
  • 我正在使用 spring 3.0,并且我还添加了我的 spring 配置文件
  • 你为bean对象的输入提供的模型属性在哪里
  • Sriprem 菜鸟:你用maven吗? - 然后请发布依赖部分,还请发布您的控制器和登录表单对象的弹簧配置和导入语句。

标签: java validation spring-mvc validationerror


【解决方案1】:

将此添加到您的弹簧配置中:

<mvc:annotation-driven/>

这将启用 Bean 验证。

文档:Reference

【讨论】:

  • 通过添加 我得到了这个错误 - “创建名为 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0' 的 bean 时出错:调用 init 方法失败;嵌套例外是 java.lang.NoClassDefFoundError: 无法初始化类 org.hibernate.validator.internal.engine.ConfigurationImpl"
  • @Sripremrookie 将hibernate-validator 添加到您的库中,这是链接:hibernate.org/validator/downloads
【解决方案2】:

您的 jsp 表单标签缺少 http 方法属性 method="POST(如果表单数据没有此属性,则提交 http GET,并且这与请求处理程序方法绑定):

<form:form method="POST" action="login.html" commandName="lform">...

【讨论】:

  • 我也试过了,但仍然遇到同样的问题。
  • 我认为我的 Bindingresult 没有得到那些错误值可能是映射有问题!
  • 我不知道我的编码还有什么问题,一切似乎都很好! !