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

Przekazanie wartości z HTML do zmiennej w JAVA / SPRING BOOT

0 głosów
1,295 wizyt
pytanie zadane 23 stycznia 2022 w Java przez XavRock Obywatel (1,390 p.)

Witam mam problem z przekazaniem wartości z <input> do zmiennych w metodzie w Java.

Zawartość diva w htmlu:

<div class="row align-items-start">
            <h1>Podaj wartości.</h1>
            <hr>
            <div class="row">
                <div class="col-6 col-sm-3">
                    <label>Waluta startowa:</label>
                </div>
                <div class="col-6 col-sm-3">
                    <input type="text" id="currencyFromID" name="currencyFrom" value="USD" align="left"><br><br>
                </div>
                <div class="col-6 col-sm-3">
                    <label>Waluta docelowa:</label>
                </div>
                <div class="col-6 col-sm-3">
                    <input type="text" id="currencyToID" name="currencyTo" value="EUR" align="left"><br><br>
                </div>
                <div class="col-6 col-sm-3">
                    <label>Data kursu:</label>
                </div>
                <div class="col-6 col-sm-3">
                    <input type="text" id="timeID" name="time" value="2021-06-09" align="left"><br><br>
                </div>
            </div>
            <form action="">
                <a href="/convert/${currencyFrom.value}/${currencyTo.value}/${time.value}" class="button">Oblicz</a>
            </form>
        </div>

Metoda w Java:

    @RequestMapping ("/convert")
    public  String convert(){
        String currencyFrom;
        String currencyTo;
        String time;
        float toEuro = exchangeRateRepository.querryToDatabaseCurrencyEuro(currencyFrom,time);
        float rateEuro = 1/toEuro;
        return "Aktualny kurs" + " " + currencyFrom + " na " + " " + currencyTo + " " + "wynosi" + " " + rateEuro;
    }

 

Czy ktoś z was jest w stanie mi wyjaśnić jak można to zrobić ??

1 odpowiedź

+2 głosów
odpowiedź 23 stycznia 2022 przez Wiciorny Ekspert (283,300 p.)
wybrane 23 stycznia 2022 przez XavRock
 
Najlepsza

Po 1 masz samo request mapping nie ma mowy tu o żadnej metodzie która ma wysłać coś, jej typie https://www.baeldung.com/spring-requestmapping brakuje specyfikacji dla rodzaju metody HTTP REST 


Po drugie twoja metoda nie przyjmuje parametrów, ani ciała m[ @RequestBody- ktore wskazywaloby np na wysylanie po stronie klienta jakiegos obiektu np json - formatu, lub tekstowego, binarnego etc. 

public  String convert([brak tutaj parametrów, które metoda przyjmuje] )

możesz przekazać zmienne w adresie URL jako @pathvariable, albo @requestparam o różnicy i sposobie więcej masz tutaj https://www.dineshonjava.com/requestparam-vs-pathvariable-annotations-in-spring-mvc/

po trzecie i najważniejsze, nie ma sposobu takiego żeby odebrac te zemienne bez frameworka np w tym wypadku jesli nie jest to jsp to thymeleaf. Jedynie jakbys zapisal wartosci inputa do sesji i wtedy odczytywal to z Request session, ale tez nie jest to dobre i tak sie nie robi

Korzystasz z jakiegos frameworka na froncie? Nie wiem ajax, jsp-page, struts, thymeleaf jako szablon styli ? Jak masz front-end skonfigurowany ? 

Dodatkowo nigdzie w metodzie nie odbierasz tych zmiennych 

komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)

Korzystam z thymeleaf, ten kod metody jest poglądowy. Pobieram dane z URL, lecz muszę zrobić bardzo prosty frontend. Trzy pola do wpisywania danych i jeden przycisk. 

To może inaczej, czy jest możliwe aby przekazać parametry z <input> do <a href=""> 

A następnie to wysłać do metody w Java ? Robiłem coś podobnego ale wartości wpisywałem w wpisując je w URL. A teraz muszę zrobić najprostszy frontend, aby tą aplikację skonteneryzować. 

komentarz 23 stycznia 2022 przez Wiciorny Ekspert (283,300 p.)
chętnie Ci pomogę i napiszę metode, ale wrzuć kod w bloczki- bo zdjęcie jest nieczytelne.
Chyba, że jest to ten sam skrypt co w pytaniu, to pomogę Ci napisać i wytłumacze jak ja to widze
komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)
To jest tem skrypt co w pytaniu. Chcę w najprostszy sposób przekazać trzy wartości z HTMLa do Javy.
komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)

Coś takiego próbuję zrobić:

komentarz 23 stycznia 2022 przez Wiciorny Ekspert (283,300 p.)

Prosiłem kod nie dodawać w formie zdjęć bo na nich nic nie ma

Zacznij od tego masz formularz. 
Formularz wymaga -> metody jaką wysyła "typ" POST np. oraz akcji jaka zachodzi (mapowania url ) , inputy powinny znajdować się wewnątrz wysyłanego formularza , a przycisk submit również, który przesyła nam ten formularz to do poprawy 

<form th:action="@{/convert}"  method="post">
<input type="text" th:value="${currencyFrom}" name="currencyFrom"/>
<input type="text" th:value="${currencyTo}" name="currencyTo"/>
<input type="text" th:value="${timeID}" name="timeID"/>
<input type="submit" />
</form>
//spring mapuje elementy po name. jeśli chodzi o atrybut
@RequestMapping(value="/convert", method = RequestMethod.Post)
public String process(Model model, @RequestParam String currencyFrom,@RequestParam String currencyTo,@RequestParam String timeID) {
  // twoja logika funkcji
  }

Pomyśl nad niezapisywaniem daty jako stringu i tym, żeby może stworzyć obiekt. 

 

komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)

Dodałem w adnotacji 

method = RequestMethod.POST

oraz w <form> 

method="post"

Jedyną różnicą jest to że obecnie wyświetla mi 500tke. 

Java:

    @RequestMapping(value="/convert", method = RequestMethod.POST)
    public String process(@RequestParam String currencyFrom, @RequestParam String currencyTo, @RequestParam String time) {
        float from = exchangeRateRepository.querryToDatabaseCurrencyFrom(currencyFrom,time);
        float to = exchangeRateRepository.querryToDatabaseCurrencyTo(currencyTo,time);

        float wynik = to/from;
        return "Wynik " + wynik;
    }

HTML

<!DOCTYPE html>
<html lang="pl" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Kursy walut</title>
</head>
<body>
    <div class="container">
        <div class="row align-items-start">
            <h1>Podaj wartości.</h1>
            <hr>
            <form th:action="@{/convert}"  method="post">
                <input type="text" th:value="${currencyFrom}" name="currencyFrom"/>
                <input type="text" th:value="${currencyTo}" name="currencyTo"/>
                <input type="text" th:value="${timeID}" name="timeID"/>
                <input type="submit" />
            </form>
        </div>
    </div>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</body>
</html>

 

komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)

Obecnie mam tak:

HTML:

<div class="row align-items-start">
            <h1>Podaj wartości.</h1>
            <hr>
            <form action="message">
                <div>
                    <label>Waluta startowa:</label>
                    <input type="text" name="currencyFrom">
                </div>
                <div>
                    <label>Waluta docelowa:</label>
                    <input type="text" name="currencyTo">
                </div>
                <div>
                    <label>Data:</label>
                    <input type="text" name="time">
                </div>
                <button type="submit">Submit</button>
            </form>
        </div>

Java:

    @RequestMapping(path="/message", produces=MediaType.TEXT_PLAIN_VALUE)
    @ResponseBody
    public String processForm(@RequestParam String currencyFrom, @RequestParam String currencyTo, @RequestParam String time) {
//        float from = exchangeRateRepository.querryToDatabaseCurrencyFrom(currencyFrom,time);
//        float to = exchangeRateRepository.querryToDatabaseCurrencyTo(currencyTo,time);
//
//        float rate = to/from;
        return String.format("%s %s!", currencyFrom, currencyTo, time);
    }

Ogólnie tą metodą mogę zwrócić to co dodałem w <input>, ale jak od komentuję logikę do bazy danych to mam 500. 

1
komentarz 23 stycznia 2022 przez Wiciorny Ekspert (283,300 p.)
ale 500 to błąd serwera a nie wina przekazania klienta
komentarz 23 stycznia 2022 przez XavRock Obywatel (1,390 p.)

Teraz chyba jestem w stanie to ogarnąć. Dzięki za pomoc i poświęcony czas smiley

1
komentarz 23 stycznia 2022 przez Wiciorny Ekspert (283,300 p.)
nie ma za co w tym zakresie polecam się na przyszłość, jak coś to pytaj

Podobne pytania

0 głosów
0 odpowiedzi 368 wizyt
pytanie zadane 19 lutego 2020 w Java przez JuniorPL Użytkownik (770 p.)
0 głosów
0 odpowiedzi 460 wizyt
pytanie zadane 30 lipca 2020 w Java przez Szyszka Gaduła (3,530 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...