• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

spring mvc Date

Object Storage Arubacloud
0 głosów
254 wizyt
pytanie zadane 4 kwietnia 2018 w Java przez LockeLamora Użytkownik (740 p.)

form

<input type="date" name="date" id="date" class="form-control" placeholder="Date">

controller

@PostMapping("/newtask")
    public String newTask(@ModelAttribute("date") Date pickedDate, BindingResult result) {
        if (result.hasErrors()) {
            List<ObjectError> errors = result.getAllErrors();
            errors.forEach(err -> System.out.println(err.getDefaultMessage()));
        }
        System.out.println(pickedDate + " controller");
        return "redirect:/newtask";
    }

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class,
                new CustomDateEditor(new SimpleDateFormat("dd-MM-yyyy"), true));
    }

Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'date'; nested exception is java.lang.NumberFormatException: For input string: "2018-04-08"

 

A druga rzecz to zanim dodałem BindingResult to wywalało błąd Validation failed, dlaczego przy Date w ogole była walidacja?

1 odpowiedź

0 głosów
odpowiedź 5 kwietnia 2018 przez Wiciorny Ekspert (269,710 p.)
edycja 5 kwietnia 2018 przez Wiciorny

BindingResult

Wiesz do czego służy? Do Validacji - niezależnie od tego co posyłasz: to jest validator CONTROLERA jako wykonania, a nie jako elementu/argumentu przekazanego.

Więc zawsze element, jest poddawany validacji. 

Druga sprawa nie możesz konwertować  na String w taki sposób  na prymitywny Int. Stosując adnotacje value: 

https://stackoverflow.com/questions/23702041/failed-to-convert-property-value-of-type-java-lang-string-to-required-type-java

https://stackoverflow.com/questions/10413886/what-is-the-use-of-bindingresult-interface-in-spring-mvc

 

Ewentualnie użyj adnotacji tam gdzie  określasz format daty 

@DateTimeFormat(pattern = "dd/MM/yyyy")

Kolejna sprawa " inputowy string jest w złym formacie'

For input string: "2018-04-08"       tu masz format YYYY-MM-DD 

A ty zadeklarowałeś inna kolejność 

new SimpleDateFormat("dd-MM-yyyy"), true));

 

komentarz 5 kwietnia 2018 przez LockeLamora Użytkownik (740 p.)

BindingResult

Wiesz do czego służy? Do Validacji - 

Ale właśnie kiedy kiedy kod wyglada tak

    @PostMapping("/newtask")
    public String newTask(@ModelAttribute("date") Date pickedDate) {
//        if (result.hasErrors()) {
//            List<ObjectError> errors = result.getAllErrors();
//            errors.forEach(err -> System.out.println(err.getDefaultMessage()));
//        }
        System.out.println(pickedDate.toString());
        return "redirect:/newtask";
    }

Dostaje Validation failed

https://i.imgur.com/vs03fZ7.png

 

A w ogóle to ciekawe jest to że dostaje ten błąd ''Failed to convert" i mimo tego pod zmienna pickedDate jest ta data którą wybrałem 

https://i.imgur.com/aAqtUw1.png

komentarz 5 kwietnia 2018 przez Wiciorny Ekspert (269,710 p.)
Bo validacja musi byc obsłużona, czyli Ty nie rozumiesz- nie jest  ... to walidacja obiektu... ty validujesz wykonanie całej metody... musi to zostać zaimplementowane, validujesz nawet metode w sytuacjach kiedy - nie posyłasz argumentów
komentarz 5 kwietnia 2018 przez LockeLamora Użytkownik (740 p.)
Czyli kazda metoda jest poddawana waldacji a dopiero jak chce miec swoje 'zasady' to uzywam @Valid na obiekcie tak?

Podobne pytania

0 głosów
1 odpowiedź 509 wizyt
pytanie zadane 14 października 2021 w Java przez Tajniakkk Użytkownik (600 p.)
+1 głos
1 odpowiedź 431 wizyt
pytanie zadane 14 sierpnia 2021 w Java przez DziQu Początkujący (420 p.)
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 25 listopada 2019 w Java przez Piotrek1604 Użytkownik (560 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...