Spring MVC валидация не работает. Как сделать? - PullRequest
0 голосов
/ 16 апреля 2020

Весной не могу сделать проверку mvc. Я пытался решить эту проблему в течение двух дней и не могу. Поэтому я прошу вашей помощи.

Это весь мой проект.

Структура проекта

Это мой пользователь

    package com.springfreemarkerform;


    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;

    public class User {


        @NotNull
        @NotEmpty
        @Size(min = 1, max = 2)
        private String username;



        public String getUsername() {
            return username;
        }



        public void setUsername(String username) {
            this.username = username;
        }

    }

Это мой контроллер

    package com.springfreemarkerform;

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;

    import javax.validation.Valid;

    @Controller
    public class FormController {


        @GetMapping("/")
        public String home() {
            return "redirect:/form";
        }




        @GetMapping("/form")
        public String getForm (Model model) {

            model.addAttribute("user", new User());
            return "/form";

        }




        @PostMapping("/form")
        public String postForm(@Valid User user, BindingResult result) {

            if (result.hasErrors()) {
                return "/error";
            }
            return "/good";
        }


    }

Это моя HTML страница.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Форма</title>
    </head>
    <body>


    <form action="/form" method="POST" name="user">

        <input type="text" name="username" >
        <button type="submit">submit</button>

    </form>


    </body>
    </html>

Это мой пом. xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>com.springfreemarkerform</groupId>
        <artifactId>SpringFreemarkerForm</artifactId>
        <version>1.0-SNAPSHOT</version>

        <build>
            <plugins>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${encoding}</encoding>
                    </configuration>
                </plugin>

            </plugins>
        </build>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <failOnMissingWebXml>false</failOnMissingWebXml>
            <java.version>1.8</java.version>
            <encoding>UTF-8</encoding>
        </properties>

        <dependencies>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>



            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>6.1.2.Final</version>
            </dependency>

            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.29</version>
            </dependency>

            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>2.0.1.Final</version>
            </dependency>


            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
            </dependency>

        </dependencies>

    </project>

И дальнейшая настройка java классов, так как я не использую xml настройки .

Это мой ServletInit

    package com.springfreemarkerform;

    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

    public class ServletInitSakh extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            return null;
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class<?>[] { FreeMarkerConfigSakh.class };
        }

        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    }

Это мой FreeMarkerConfig

    package com.springfreemarkerform;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
    import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

    import java.util.Properties;

    @Configuration
    @ComponentScan("com.springfreemarkerform")
    public class FreeMarkerConfigSakh {

        @Bean
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
            configurer.setTemplateLoaderPath("/WEB-INF/templates");
            configurer.setDefaultEncoding("UTF-8");
            configurer.setFreemarkerSettings(new Properties() {{
                put("default_encoding", "UTF-8");
            }});
            return configurer;
        }

        @Bean
        public ViewResolver getViewResolver(){
            FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
            viewResolver.setSuffix(".ftl");
            viewResolver.setContentType("text/html;charset=UTF-8");
            viewResolver.setCache(false);
            return viewResolver;
        }
    }

Как я поймите это, если я укажу неправильное значение во вводе, например, оставлю это поле пустым или укажу более двух символов и отправлю эту форму, тогда должно произойти то самое чудо, то есть значение из формы, а именно поле фамилии, не должен попадать в поле фамилии, которое относится к классу User. И BindingResult, который находится в контроллере в методе postForm, должен сообщить об ошибке. Но ничего из этого не происходит и не работает.

Прошу вашей помощи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...