使用@Valid会引发异常,并且在基本的Spring 3.0 MVC程序中无法正常工作

柴坦亚

我正在使用Spring In Action 3rd Action学习Spring MVC ,我已经实现了显示用户注册表单的基本程序,一旦我们提交了表单,它将使用进行验证@Valid

这是我的Spring Controller:

@Controller
@RequestMapping("/spitter")
public class SpitterController {
        private final SpitterService spitterService;

        @Inject
        public SpitterController(SpitterService spitterService) {
            this.spitterService = spitterService;
        }

        @RequestMapping(method = RequestMethod.GET, params = "new")
        public String createSpitterProfile(Model model) {
            Spittle spittle = new Spittle();
            model.addAttribute(spittle);

            model.addAttribute(new Spitter());
            return "spittles/edit";
        }

            @RequestMapping(method = RequestMethod.POST)
            public String addSpitterFromForm(@Valid Spitter spitter,
            BindingResult bindingResult) {
               if (bindingResult.hasErrors()) {
                    return "spittles/edit";
               }
               spitterService.saveSpitter(spitter);
               return "redirect:/spitter/" + spitter.getUsername();
                }
             }

这是我的Spitter课程文件:

package com.habuma.spitter.domain;

import java.util.List;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class Spitter {
    private Long id;

    @Size(min = 3, max = 20, message = "User name must be between 3 and 20 characters long.")
    @Pattern(regexp = "^[a-zA-Z0-9]+$", message = "Username must be alphanumeric with no spaces")
    private String username;

    @Size(min = 6, max = 20, message = "The password must be atleast 6 characters long.")
    private String password;

    @Size(min = 3, max = 50, message = "Your full name must be between 3 and 50 characters long.")
    private String fullName;

    @Pattern(regexp = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}", message = "Invalid email address.")
    private String email;

    private List<Spittle> spittles;
    private boolean updateByEmail;

    ......Setters & Getters.....

    @Override
    public boolean equals(Object obj) {
        Spitter other = (Spitter) obj;
        return other.fullName.equals(fullName)
                && other.username.equals(username)
                && other.password.equals(password);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }
}

这是我的edit.jsp文件,显示给用户注册:

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<div>
    <h2>Create a free Spitter account</h2>
    <sf:form method="POST" modelAttribute="spitter" enctype="multipart/form-data">
        <fieldset>
            <table cellspacing="0">
                <tr>
                    <th><label for="user_full_name">Fullname:</label></th>
                    <td><sf:input path="fullName" size="15" id="user_full_name" />
                        <sf:errors path="fullName" cssClass="error" /></td>
                </tr>
                <tr>
                    <th><label for="user_screen_name">Username:</label></th>
                    <td><sf:input path="username" size="15" maxlength="15"
                            id="user_screen_name" /> <small id="username_msg">No spaces,please.</small>
                        <sf:errors path="username" cssClass="error" /></td>
                </tr>
                <tr>
                    <th><label for="user_password">Password:</label></th>
                    <td><sf:password path="password" size="30" showPassword="true"
                            id="user_password" /> <small>6
                            characters or more (betricky!)</small> <sf:errors path="password"
                            cssClass="error" /></td>
                </tr>
                <tr>
                    <th><label for="user_email">EmailAddress:</label></th>
                    <td><sf:input path="email" size="30" id="user_email" /> <small>In
                            case you forget something</small> <sf:errors path="email"
                            cssClass="error" /></td>
                </tr>
                <tr>
                    <th></th>
                    <td><sf:checkbox path="updateByEmail"
                            id="user_send_email_newsletter" /> <label
                        for="user_send_email_newsletter">Send me email updates!</label></td>
                </tr>
                <tr>
                    <th><label for="image">Profile image:</label></th>
                    <td><input name="image" type="file" />
                </tr>
                <tr>
                    <th></th>
                    <td><input name="commit" type="submit"
                        value="I accept.Createmyaccount." /></td>
                </tr>
            </table>
        </fieldset>
    </sf:form>
</div>

要加载表单,我将以:的形式访问URL http://localhost:8081/SpringInAction3/spitter?new,加载表单后,我只是提交表单而无需输入任何详细信息,以便我可以检查表单是否得到验证。但我得到以下例外:

java.lang.NullPointerException
    com.habuma.spitter.domain.Spitter.equals(Spitter.java:87)
    org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver$TraversableHolder.equals(SingleThreadCachedTraversableResolver.java:138)
    java.util.HashMap.get(HashMap.java:305)
    org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:45)
    org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:757)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:324)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:256)
    org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:210)
    org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
    org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:106)
    org.springframework.validation.DataBinder.validate(DataBinder.java:760)

我得到NullPointerExceptionequals的方法Splitter类。请让我知道我在哪里做错了吗?

Edit:

当我尝试打印Spitter对象中字段的值时,所有字段的值都为null,从而导致NullPointerException

这次我类中删除了equalsandhashCode方法Spitter,现在当我提交表单时,验证没有发生,并且页面将http://localhost:8081/SpringInAction3/spitter/null不显示任何错误。

为什么在这种情况下不进行验证?另外,如果我只是按照那本书中的步骤进行操作,那我将得到NullPointerException,这是意外的。请让我知道我在哪里做错了吗?

按照这个SO post:@Valid(jsr 303)在Spring mvc 3.0中不起作用<mvc:annotation-driven/>,我的配置文件中也有标签

微粒

到目前为止,我看到一个错误。sf:form属性的enctype设置为multipart / form-data,但仅用于文件上传,因此我想spring mvc使用的是MultipartResolver而不是将表单数据绑定到表单支持对象的数据绑定机制,尝试将其更改为application / x-www-form-urlencoded,这是您的案例的默认和正确类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用@Valid会引发异常,并且在基本的Spring 3.0 MVC程序中无法正常工作

来自分类Dev

Pymongo 异常处理在 python 3 中无法正常工作

来自分类Dev

具有Spring MVC 3集成的图块3无法正常工作

来自分类Dev

Spring MVC VersionResourceResolver / ContentVersionStrategy在JSP中无法正常工作

来自分类Dev

我的EXTI0中断处理程序未覆盖/无法正常运行(STM32F3Discovery)

来自分类Dev

glDrawArrays无法正常工作。在GTK3中使用GtkGLArea

来自分类Dev

Boostrap 3中的Scrollspy无法正常工作

来自分类Dev

为什么这个简单的井字游戏程序会“忘记”数组中位置[0] [0]的值,但对其他所有东西都可以正常工作?

来自分类Dev

Spring MVC:Apache Tile无法正常工作

来自分类Dev

基本的EJB3项目无法正常工作。NameNotFound异常

来自分类Dev

spring3国际化无法正常工作

来自分类Dev

IPN Listner无法正常工作MVC3

来自分类Dev

IPN Listner无法正常工作MVC3

来自分类Dev

使用较少,CSS3 calc()无法正常工作

来自分类Dev

使用s3reader的ImageResizing无法正常工作

来自分类Dev

jQuery在Firefox上无法正常运行,并且在Safari中根本无法正常工作

来自分类Dev

Animate({right:0})在Chrome和Opera中无法正常工作

来自分类Dev

SQL Server中的最小功能无法正常工作给0

来自分类Dev

Java中的冒泡排序无法正常工作。只显示0

来自分类Dev

Animate({right:0})在Chrome和Opera中无法正常工作

来自分类Dev

在vim regexp替换中submatch(0)无法正常工作吗?

来自分类Dev

Tiles中的图像/ CSS /样式和包含的页面中的Spring MVC无法正常工作

来自分类Dev

Chrome中CSS3动画无法正常恢复到0%

来自分类Dev

在MVC应用程序中使用log4net附加程序azure无法使log4net正常工作

来自分类Dev

使用MVC 5 ViewModel在PartialView中嵌套的ForLoop无法正常工作

来自分类Dev

将Spring Boot应用程序部署到独立的Tomcat中后无法正常工作

来自分类Dev

使用php和mysql的Xcode中的登录程序无法正常工作

来自分类Dev

如何从Spring MVC Web应用程序的任何位置进入Web流?Spring Web Flow Webapp无法正常工作

来自分类Dev

ViewResolver在Spring 4中无法正常工作

Related 相关文章

  1. 1

    使用@Valid会引发异常,并且在基本的Spring 3.0 MVC程序中无法正常工作

  2. 2

    Pymongo 异常处理在 python 3 中无法正常工作

  3. 3

    具有Spring MVC 3集成的图块3无法正常工作

  4. 4

    Spring MVC VersionResourceResolver / ContentVersionStrategy在JSP中无法正常工作

  5. 5

    我的EXTI0中断处理程序未覆盖/无法正常运行(STM32F3Discovery)

  6. 6

    glDrawArrays无法正常工作。在GTK3中使用GtkGLArea

  7. 7

    Boostrap 3中的Scrollspy无法正常工作

  8. 8

    为什么这个简单的井字游戏程序会“忘记”数组中位置[0] [0]的值,但对其他所有东西都可以正常工作?

  9. 9

    Spring MVC:Apache Tile无法正常工作

  10. 10

    基本的EJB3项目无法正常工作。NameNotFound异常

  11. 11

    spring3国际化无法正常工作

  12. 12

    IPN Listner无法正常工作MVC3

  13. 13

    IPN Listner无法正常工作MVC3

  14. 14

    使用较少,CSS3 calc()无法正常工作

  15. 15

    使用s3reader的ImageResizing无法正常工作

  16. 16

    jQuery在Firefox上无法正常运行,并且在Safari中根本无法正常工作

  17. 17

    Animate({right:0})在Chrome和Opera中无法正常工作

  18. 18

    SQL Server中的最小功能无法正常工作给0

  19. 19

    Java中的冒泡排序无法正常工作。只显示0

  20. 20

    Animate({right:0})在Chrome和Opera中无法正常工作

  21. 21

    在vim regexp替换中submatch(0)无法正常工作吗?

  22. 22

    Tiles中的图像/ CSS /样式和包含的页面中的Spring MVC无法正常工作

  23. 23

    Chrome中CSS3动画无法正常恢复到0%

  24. 24

    在MVC应用程序中使用log4net附加程序azure无法使log4net正常工作

  25. 25

    使用MVC 5 ViewModel在PartialView中嵌套的ForLoop无法正常工作

  26. 26

    将Spring Boot应用程序部署到独立的Tomcat中后无法正常工作

  27. 27

    使用php和mysql的Xcode中的登录程序无法正常工作

  28. 28

    如何从Spring MVC Web应用程序的任何位置进入Web流?Spring Web Flow Webapp无法正常工作

  29. 29

    ViewResolver在Spring 4中无法正常工作

热门标签

归档