Pobranie wartości textfield i dodanie jej do RequestMapping

0

Witam w jaki sposób pobrać wartość wpisaną do pola tekstowego w .jsp i podać ją jako argument przy adnotacji @RequestMapping w Spring MVC ?

0

Ale chodzi ci o argument w sensie PathVariable?

@RequestMapping(value = "/blablabla/{nazwaParametru}", method=RequestMethod.GET)
public ModelAndView handle(@PathVariable String nazwaParametru){
    //logika kontrolera
}

I teraz jeśli z formularza przejdziesz pod adres /blablabla/cośtam to cośtam wyląduje w tej zmiennej. Więc musisz submitować ten formularz pod taki adres na podstawie wartości twojego pola. O ile w ogóle o to pytasz, bo jeśli chodzi ci generalnie o przekazywanie danych z formularza to patrz tu: https://github.com/Pharisaeus/SpringScaffoldApplication

0

Mam takie pole i button w html:

 
<input id="search" type="text">
<a href=" <spring:url value="/${category}" />" >  
<input type="submit" id="btnAdd" class="btn btn-primary" value ="Wyszukaj kategorię"/>
</a>

i taką metodę mapującą ścieżkę żądania w klasie kontroler:

@RequestMapping("/{category}")
public String getProductsByCategory(Model model, @PathVariable("category") String productCategory)
{
....
}

i teraz jak do zmiennej productCategory przekazać wartość pola search i czy tutaj <a href=" <spring:url value="/${category}" />" > powinienem mieć category czy productCategory?

0

W ogóle źle to robisz w takim razie. To po prostu nie zadziała. Parametry z formularza można wysłać jako POST albo GET ale wymaga to żebyś miał poprawny formularz <form> i ustawione action. Ty robisz po prostu taki lewy button który jest linkiem i przechodzisz sobie pod adres /{category} tracąc przy tym cokolwiek mogło być w formularzu.
Żeby osiągnąć efekt którego oczekujesz musiałbyś dopiąć tam jakiś javascript który przechwytywałby kliknięcie buttona i w onSubmit przekierowywał pod adres związany z tekstem w polu search. Wydaje mi się że to zbędne kombinowanie i lepiej zrobić tam po ludzku formularz.

Popatrz na to:
https://github.com/Pharisaeus/SpringScaffoldApplication/blob/master/src/main/webapp/WEB-INF/pages/main.ftl
https://github.com/Pharisaeus/SpringScaffoldApplication/blob/master/src/main/java/scaffold/controllers/main/MainController.java

0

<@spring.formInput "inputBean.name" /> u mnie nie działa

0

Bo pewnie nie używasz freemarkera tylko czegoś innego (JSTL?). Tu masz opisane formularze dla JSTL http://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html#view-jsp-formtaglib-formtag a tutaj http://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html także inne silniki (jak velocity i freemarker).

0

Nie wiem już sam coś ciągle robię źle, prawdopodobnie potrzebuje powiązać pole z input do zmiennej PathVariable , czyli to InputFormBean, ale nie mogę znależć czegoś takiego w dokumentacji.
Mam coś takiego:

<form action="/{category}" method="post">
	<input id="productCategory" type="text" class="form:input-large"/>
	<input type="submit" value="Wyszukaj kategorię"/>
	</form>
 
@RequestMapping(value="/{category}", method=RequestMethod.POST)
	public String productsByCategory(Model model, @ModelAttribute("productCategory") @PathVariable("category") String productCategory){
...
return "aaaa";
}

Wydaje mi się że powinienem tutaj String productCategory zmienić typ zmiennej na coś w stylu InputForm czy coś takiego, ale nie mogę takiego typu znależć.

0

No Ty chcesz wziac kategorie z URL i zarazem z inputa.

0

@Deep OMG przecież tam masz DWA RÓŻNE PARAMETRY a ty próbujesz z jakiegoś powodu pchać je do tego samego pola. Czemu? To przecież nie ma sensu. Przecież to twoje productCategory to jest zupełnie co innego niż category. A jeśli nie jest to jedno z nich powinno w ogóle wylecieć.

Zróbmy inaczej: napisz co chcesz osiągnąć, bo ewidentnie nie masz pojecia co robisz i analizowanie tych twoich "prób" nie przyniesie żadnego pożytku. Skupmy się na rozwiązaniu pierwotnego problemu.

0

Zgadza się w poprzednim poście pomyliłem się. Chcę zrobić proste wyszukiwanie w ten sposób:

  1. Odczytuje wartość pola input text.
  2. Dodaje wartość pola input text do zmiennej ścieżki o nazwie category.
 
@RequestMapping(value="/{category}", method=RequestMethod.POST)
	public String productsByCategory(Model model, @PathVariable("category") String productCategory){
...
return "aaa";
}
<section class="container">
	<form action="/{category}" method="post">
	<input id="category" type="text" class="form:input-large"/>
	<input type="submit" value="Wyszukaj kategorię"/>
	</form>
 

Zatem patrząć na kod wartość tego pola: <input id="category" type="text" class="form:input-large" /> chcę umieścić w tej zmiennej @PathVariable("category") String productCategory.

Zakładam, że @PathVariable("category") String productCategory oznacza to samo co @PathVariable String category .

Aha już rozumiem czyli @PathVariable służy jedynie do pobrania wartości z szablonu URI.

0

No to tak nie zadziała bo przecież form action wygeneruje się kiedy strona się renderuje i koniec. A wtedy jeszcze to pole nie ma żadnej wartości. PathVariable sie to tego nadaje jak pięść do oka ;] Prześlij to jako normalny parametr z formularza, tak jak w przykładzie który podlinkowałem.

PathVariable byłoby ok jakbyś miał na przykład na stronie listę linków do różnych kategorii na zasadzie url/kategoria1, url/kategoria2 i potem w kontrolerze chciałbyś pobrać sobie tą ścieżkę żeby wyświetlić odpowiednią kategorię. To nie jest nrzędzie do odbierania danych z formularza!

0

Ale ty użyłeś do tego InputFormBean tak? A ja z tego nie mogę skorzystać.

0

A to niby czemu? o_O Ktoś ci zabrania zrobienia sobie klasy do przechwytywania parametrów z formularza? Bo wiesz, tak się to zwykle robi... Bo rozumiesz że ten InputFormBean to jest moja własna klasa? ;]

0

Dobra nie wiem jak to zrobić to strzelam dalej, może mnie jakoś naprowadzisz. Problemem jest też to że ty tamkoszystasz z klasy ModelAndView a ja korzystam z Model.
Mam teraz coś takiego:

 

@RequestMapping(value="/{productCategory}", method=RequestMethod.POST)
	public String productsByCategory(Model model, @ModelAttribute("productCategory") InputFormBean productCategory){
		model.addAttribute("products", productService.getProductsByCategory(productCategory.getCategory()));
		return "products";
	}
 
<form action="/productCategory" method="post">
	<input id="productCategory" type="text" class="form:input-large"/>
	<input type="submit" value="Wyszukaj kategorię"/>
	</form>

Podpowiesz jak to zmodyfikować aby działało?

0

Popowie ktoś jak ma wyglądać kod aby działało? To by mi rozwiązało wiele problemów, wiedziałbym jak zrobić wyszukiwanie, filtrowanie itd. Nie nauczę się tego jak nie bedę miał pokazanego przykładu.

1

Deep probujesz po omacku, nie mozesz poczytac tutoriala pierwszego lepszego?

Na Twoje potrzeby to to na dole powinno wystarczyc (nie sprawdzalem czy nie ma jakichs errorow) chociaz nie bedzie zmieniac URL tak jak chciales.

@RequestMapping(value="/search", method=RequestMethod.POST)
    public String productsByCategory(Model model, @RequestParam(value = "productCategory") String productCategory){
        model.addAttribute("products", productService.getProductsByCategory(productCategory));
        return "products";
    }
<form action="/search" method="POST">
    <input name="productCategory" type="text"/>
    <input type="submit" value="Wyszukaj kategorię"/>
</form>
0

Niestety Swr to też nie działa.

0

Co ci nie dziala? Wez postaw breakpointa albo wypisz System.out czy wchodzi Ci do tej metody i czy productCategory ma wartosc. Ostateczie problem moze tkwic gdzies wczesniej albo pozniej. Najlepiej podaj swojego poma, konfiguracje, ten przykladowy kontroler i html.

0

Ok wszystko już działa dzięki wielkie. Mam pytanie możesz jakieś tutoriale polecić o których wspominałeś?

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