Chciałbym wiedzieć, jak mogę rozwiązać ten problem, wyjaśnię: chcę utworzyć pasek wyszukiwania i wysłać użytkownika do widoku jsp z wynikami. Stworzyłem w moim kontrolerze następną metodę:

 @RequestMapping(value = "/search={productName}", method = RequestMethod.GET)
 public ModelAndView getProducteByName(@PathVariable("productName") String productName) {

        ModelAndView modelview = new ModelAndView("/productSearch");  
        List productsByName = productService.getProductByName(productName);                  
        modelview.addObject("productsByName", productsByName );    
        return modelview;

Mam formularz w pliku jsp, taki jak ten:

    <!-- Search form -->
<form class="form-inline md-form form-sm mt-0" method="get" >
   <i class="fas fa-search" aria-hidden="true"></i>
   <input class="form-control form-control-sm ml-3 w-75" type="text" placeholder="Search" name="search"
                aria-label="Search">
</form> 

Problem polega na tym, że kiedy umieszczam cokolwiek do przeszukania w wyszukiwarce słupkowej, działa, umieszcza mi ? w adresie URL, więc kontroler nie rozumie requestMapping.

Przykład: http://localhost:8080/projectbotigabio/search=potato i stawia mnie: http://localhost:8080/projectbotigabio/?search=potato Próbowałem wielu rzeczy, w tym próbę wstawienia jako metody „post” zamiast „get”, ale to nie działa ... jakieś rozwiązanie?

-1
Jonathan Barrio 19 listopad 2019, 22:17
Czy możesz wypróbować @RequestMapping (value = "/ search / {productName}"
 – 
Jigar Gajjar
19 listopad 2019, 22:21

1 odpowiedź

Przeglądarki internetowe obsługują tylko 3 rodzaje przesyłania formularzy:

  • method="get"

    Każda wartość formularza jest dodawana do adresu URL za pomocą ?name=value&name=value&...

  • method="post"

    Każda wartość formularza jest dodawana do POST z typem treści application/x-www-form-urlencoded i treścią name=value&name=value&...

  • method="post" enctype="multipart/form-data"

    Żądanie POST ma typ treści multipart/form-data, a treść jest wieloczęściowa, a każda część jest wartością formularza.

Przeglądarki internetowe nie mogą zbudować żądanego adresu URL, więc musisz zrobić to sam, tj. Uniemożliwić przeglądarce wysyłanie żądania POST i wysłać własne żądanie za pomocą Ajax. Jeśli tego chcesz, załóż czapkę do nauki i zacznij uczyć się, jak to działa.

Zalecam zaprzestanie prób używania niestandardowej składni adresu URL i użycie standardowego przetwarzania GET.

Tak czy inaczej, sugeruję, abyś dowiedział się więcej o tym, jak działają formularze HTML, zanim spróbujesz dalej odejść od standardów.

0
Andreas 19 listopad 2019, 22:36
Dziękuję bardzo za wyjaśnienie! Wtedy spróbuję użyć Ajax ...
 – 
Jonathan Barrio
20 listopad 2019, 22:46