Walidacja formularza w Spring - problem.

Odpowiedz Nowy wątek
Antonii
2017-04-27 12:06
Antonii
0

Witam.

Przerabiam tutoriala z tym problemem, mimo że wszystko zrobiłem wg. zaleceń walidacja nie działa.
Problem w tym że BindingResult nie zwraca błędu kiedy wprowadzone dane nie powinny przejść.
Kod kontrolera:

@RequestMapping(value = "/sendMailSimple", method = POST)
    public String sendSimpleMail(@ModelAttribute("form") @Valid FormularzDTO form, BindingResult result) {

        if (result.hasErrors()) {
            System.out.println("2. formularz nie jest uzupełniony prawidłowo. !!!!!!!!");
            return "form.html";
        } else {
            System.out.println("2. formularz wypełniony prawidłowo.");
            return "redirect:sent.html";
        }
    }    

Rozumiem że mogłem się pomylić.
Więc pobrałem gotowy kod całego projektu z:

http://www.mkyong.com/spring-[...]mvc-and-jsr303-valid-example/

i mam dokładnie to samo.
W jaki sposób podejść do tematu ażeby znaleźć przyczynę?

Pozdrawiam.

Pozostało 580 znaków

2017-04-27 12:11

Rejestracja: 5 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Warszawa

0

NIe masz tego na githubie?


Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 1x, ostatnio: scibi92, 2017-04-27 12:30

Pozostało 580 znaków

Antonii
2017-04-27 12:24
Antonii
0

Nie mam.

Pozostało 580 znaków

Bogaty Programista
2017-04-27 12:24
Bogaty Programista
0

Trochę stary ten tutorial.

Pozostało 580 znaków

2017-04-27 12:34

Rejestracja: 5 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Warszawa

0
Antonii napisał(a):

Nie mam.

No to sory, nie będe zgadywać ;)

Ale mogę pokazać u mnie walidację:

 @RequestMapping(value = "/register",method = RequestMethod.POST)
    @PreAuthorize(value = "permitAll")
    public ModelAndView registerSubmit(@Valid @ModelAttribute(ATTRIBUTE_REGISTER_FORM) UserRegisterDTO form, Errors errors){
        ModelAndView modelAndView = new  ModelAndView("user-register");
        if(errors.hasErrors()){
            modelAndView.addObject(ATTRIBUTE_FEEDBACK,"Data are invalid");
            modelAndView.addObject(ATTRIBUTE_REGISTER_FORM,form);
            modelAndView.setStatus(HttpStatus.BAD_REQUEST);
        }else{
            userService.registerUser(form);
            modelAndView.addObject(ATTRIBUTE_FEEDBACK,"Your account has been created");
            modelAndView.addObject(ATTRIBUTE_REGISTER_FORM,new UserRegisterDTO());
            modelAndView.setStatus(HttpStatus.CREATED);
        }
        return modelAndView;

}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserRegisterDTO {
    @Pattern(regexp = "[a-z0-9_]{4,20}",
            message = "Username should contains small letters,numbers and _ signs with 4-20 lengths ")
    private String username;
    @Pattern(regexp = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#[email protected]$%^&*-_]).{8,20}$", message =
            "Password should have length between 8 and 20,at least one lowercase,uppercase,special character and ")
    private String password;
    @Email
    private String email;

}

Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 2x, ostatnio: scibi92, 2017-04-27 12:35

Pozostało 580 znaków

Antonii
2017-04-27 13:09
Antonii
0

U mnie jest tak:

@Controller
public class MainController {

    // Sending confirmation page. 
    @RequestMapping(value = "/sent.html", method = GET)
    public String sent() {
        return "sent.html";
    }

    // Simple HTML email.
    @RequestMapping(value = {"/", "/login.html"}, method = GET)
    public String simple() {
        System.out.println("1. Wyswietlenie strony logowania.>");
        return "login.html";
    }

    //Obsługa walidacji - test
    @RequestMapping(value = "/sendMailSimple", method = POST)
    public String sendSimpleMail(@ModelAttribute("form") @Valid FormularzDTO form, BindingResult result) {

        System.out.println("ErrorCount> " + result.getErrorCount());
        System.out.println("LoginName> " + form.getLoginName());
        System.out.println("Password> " + form.getPassword());

        if (result.hasErrors()) {
            System.out.println("2. formularz nie jest uzupełniony prawidłowo. !!!!!!!!");
            return "redirect:sent.html";
        } else {
            System.out.println("2. formularz wypełniony prawidłowo.");
            return "redirect:sent.html";
        }
    }    

}
public class FormularzDTO {

    @NotNull
    @Size(min=3, max=5)
    private String loginName;

    @NotNull
    private String password;

    //@NotEmpty
    //@Email
    private String email;

    @Min(18)
    private Integer wiek;

gettery...
settery...   
}
<body>
        <div class="container">
            <h1>Spring email with Thymeleaf - test</h1>
            <h2>HTML email (simple)</h2>
            <form action="sent.html" th:action="@{/sendMailSimple}"  method="post">
                <fieldset>
                    <label for="simpleLoginName">Login:</label>
                    <input type="text" id="simpleLoginName" name="loginName" size="60" /> <br />

                   <label for="simplePassword">Password:</label>
                   <input type="text" id="simplePassword" name="Password" size="60" /> <br />

                    <label for="simpleRecipientEmail">To (email):</label>
                    <input type="email" id="simpleRecipientEmail" name="recipientEmail" placeholder="[email protected]" size="60" /> <br />
                    <input type="submit" value="Send mail" class="button-primary" />

                </fieldset>
            </form>
            <p>
                <a href="index.html" th:href="@{/index.html}" class="button">Back to home page</a>
            </p>
        </div>
    </body>

Pozostało 580 znaków

2017-04-27 13:12

Rejestracja: 5 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Warszawa

0

Hmm Ty masz BindingResults a ja mam Errrors, mój kod u mnie działa :)


Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 2x, ostatnio: scibi92, 2017-04-27 13:12

Pozostało 580 znaków

2017-04-27 13:50

Rejestracja: 2 lata temu

Ostatnio: 2 lata temu

0

Błąd nie leży raczej w różnicy między użyciem BindingResults a Errors. Ciężko będzie wywróżyć coś z fusów, najlepiej będzie jak wrzucisz gdzieś cały kod. Jesteś pewien, że implementacja beanvalidation - JSR303/JSR349 jest w classpath?

Pozostało 580 znaków

Antonii
2017-04-27 14:36
Antonii
0

Odnośnie walidacji w pom-ie mam wpis:

<dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>1.1.0.Final</version>
      <scope>compile</scope>
</dependency>

no i w projekcie w zależnościach mavena jest widoczy jar.
Ogarnę więc GitHub-a i dam tam swój projekt.
Dzięki za zainteresowanie.

Pozdrawiam.

Pozostało 580 znaków

2017-04-27 14:56

Rejestracja: 5 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Warszawa

0

A masz silnik do tego?
Np. Validator Hibernate?

U mnie to jest:


        <!-- Validation -->

        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>1.6</version>
        </dependency>

        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>el-impl</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>

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

Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 1x, ostatnio: scibi92, 2017-04-27 14:57

Pozostało 580 znaków

2017-04-27 19:31

Rejestracja: 2 lata temu

Ostatnio: 2 lata temu

1

To co dołączyłeś to tylko "specyfikacja". Potrzebujesz teraz jej implementacji. Jedną z nich może być właśnie Hibernate validator wspomniany przez @scibi92. Po dodaniu tej zależności powinno działać - spring powinien ją wykryć automatycznie.

Ponadto twoja zależność ma "scope" "compile", czyli w ogóle nie jest dostępna w trakcie uruchomienia programu.

edytowany 1x, ostatnio: samouczek, 2017-04-27 19:33

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0