Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

januszcjk123

Prosty kalkulator w Spring - podstawy

Rekomendowane odpowiedzi

Cześć. Chciałem sobie poćwiczyć jak działa Spring itp. Chciałem sobie stworzyć kalkulator, który będe potem ulepszać z czasem jak ogarnę jak to wszystko działa. Kalkulator ten ma obliczać na podstawie wagi, ilości gramów alkoholu i współczynnika, iles promili we krwi.

Więc tak stworzyłem sobie klase modelową


public class OperationModel {
   private double coeffieicient;
   private double bodyweight;
   private double alcoholInGrams;

   public OperationModel(double coeffieicient, double bodyweight, double alcoholInGrams) {
       this.coeffieicient = coeffieicient;
       this.bodyweight = bodyweight;
       this.alcoholInGrams = alcoholInGrams;
   }

   public OperationModel(){}

   public double getCoeffieicient() {
       return coeffieicient;
   }

   public void setCoeffieicient(double coeffieicient) {
       this.coeffieicient = coeffieicient;
   }

   public double getBodyweight() {
       return bodyweight;
   }

   public void setBodyweight(double bodyweight) {
       this.bodyweight = bodyweight;
   }

   public double getAlcoholInGrams() {
       return alcoholInGrams;
   }

   public void setAlcoholInGrams(double alcoholInGrams) {
       this.alcoholInGrams = alcoholInGrams;
   }
}

 

Stworzyłem sobię zwykła metodę, która to ma policzyć, na razie nie uwzględniałem obssługi błędów itd itd bo chce tylko uzyskać wynik

public class CalculatorLogics {

public double sum(double alcoholInGrams,double coeffieicient, double bodyweight){
   return alcoholInGrams/bodyweight*coeffieicient;
}


}

 

Stworzyłem kontroler swoją drogą nie wiem czy dobrze:

@Controller
public class CalculatorController {
OperationModel operationModel = new OperationModel();
CalculatorLogics calculatorLogics = new CalculatorLogics();

   @RequestMapping("/")
   public String createOperationModel(Model model) {
       model.addAttribute("operationModel", new OperationModel());
       return "calculatorform";
   }

   @RequestMapping(params="add", method = RequestMethod.POST)
   public String add(@ModelAttribute("operationModel")OperationModel operationModel, Model model) {
       model.addAttribute("result", calculatorLogics.sum(operationModel.getAlcoholInGrams(),operationModel.getCoeffieicient(),operationModel.getBodyweight()));
       return "calculatorform";
   }
}


 

No i fajnie mam formularz na stronce gdzie można wpisać właśnie te 3 parametry i teraz chciałbym żeby po kliknięciu przycisku Oblicz po prostu mi wynik gdzieś obok się pojawiał czyli jakoś to muszę zrobić w templates z "result" tylko nie wiem jak

 

A to mój calculatorform.html

<body>

<div class="container" >

   <form class="form-control" id ="form" th:object="${operationModel}" th:action="@{/}" th:method="post" >
       <div class="form-group" >
           <label class="control-label">Ilość wypitego alkoholu w gramach:</label>
           <input type="text" class="form-control" th:field="*{alcoholInGrams}" placeholder="Alkohol podany w gramach"/>
           <p th:if="${#fields.hasErrors('alcoholInGrams')}" th:errors="*{alcoholInGrams}"/>
       </div>
       <div class="form-group" >
           <label class="control-label">Współczynnik:</label>
           <input type="text" class="form-control" th:field="*{coeffieicient}" placeholder="Współczynnik"/>
           <p th:if="${#fields.hasErrors('coeffieicient')}" th:errors="*{coeffieicient}"/>
       </div>
       <div class="form-group" >
           <label class="control-label">Masa ciała:</label>
           <input type="text" class="form-control" th:field="*{bodyweight}" placeholder="Masa ciała"/>
           <p th:if="${#fields.hasErrors('bodyweight')}" th:errors="*{bodyweight}"/>
       </div>



       <div class="row">
           <button type="submit" class="button" name="add">Oblicz</button>
       </div>
   </form>
</div>
</body>
</html>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dodaj w html

 

<div>
   Wynik: <span th:if="${result != null}" th:text="${result}"></span>
</div>

Poza tym masz błędny @RequestMapping dla POST i się nie wykona ta metoda. Powinno być:

 

@RequestMapping(path="/", method = RequestMethod.POST)

 

Dodatkowo ta linia:

 

OperationModel operationModel = new OperationModel();

nie ma sensu. Nieużywana zmienna.

 

 

Żeby było w duchu Springs zamiast tworzyć samemu kalkulator przez

 

CalculatorLogics calculatorLogics = new CalculatorLogics();

lepiej jest zrobić tak:

 

@Autowired
CalculatorLogics calculatorLogics;

i zwalić tworzenie obiektu na Springa:

 

@Component
public class CalculatorLogics {

 

Na koniec nazewnictwo do wymiany. OperationModel nie ma nic wspólnego z modelem danych. Jest to zwykłe CalculatorFormData. CalculatorLogics raczej nie wykonuje żadnej logiki i mógłby się po prostu nazywać Calculator czy tam AlcoholCalculator. Metoda add() nie dodaje tylko oblicza - calculate().

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Super. Bardzo mi pomogłeś. A jeszcze mam takie pytanie: za każdym razem gdy odpalam sobie springa to pojawia mi się komunikat. Using generated security password: 0f2cf1c7-e9b6-4013-a295-ad8c7be0f64f. I za każdym razem musze wpisywać wygenerowane hasło... co za to odpowiada? Jak mogę się tego pozbyć?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie lepiej coś takiego sobie w javaScript napisać nie mówiąc już o tym iż ten język jest teraz na topie do tego możesz sobie pisać w nim front i backend. Nie rozumiem ludzi, którzy tworzą webówke w Javie...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie lepiej coś takiego sobie w javaScript napisać nie mówiąc już o tym iż ten język jest teraz na topie do tego możesz sobie pisać w nim front i backend. Nie rozumiem ludzi, którzy tworzą webówke w Javie...

znajac jave + podstawy springa dostanie sie bardzo szybko dobra praca. Obecnie przebywam za granica i najbardziej rozchwytywane jezyki to C++ i Java + Spring właśnie. JavaScript juz nie aż tak bardzo. Mam paru znajomych co pracuja w webówce i wszyscy siedzą w springu wiec wszystko zależy od lokacji :P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze jedna rzecz mnie zastanawia, gdy robie sobie checkbox po stronie html

<input type="radio" name="Płec" value="Kobieta">Kobieta
       <input type="radio" name="Płeć" value="Mężczyzna">Mężczyzna

To jak to spiąć żeby metoda przypisywała np po zaznaczeniu kobieta wspołczynnik 0.6 a po zaznaczeniu mężczyzna 0.7

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Using generated security password: 0f2cf1c7-e9b6-4013-a295-ad8c7be0f64f. I za każdym razem musze wpisywać wygenerowane hasło... co za to odpowiada? Jak mogę się tego pozbyć?

Prawdopodobnie masz zaciągnięty do projektu Spring Security i działa on z autokonfiguracją. Albo go wywal, albo skonfiguruj.

 

Jeszcze jedna rzecz mnie zastanawia, gdy robie sobie checkbox po stronie html

<input type="radio" name="Płec" value="Kobieta">Kobieta
       <input type="radio" name="Płeć" value="Mężczyzna">Mężczyzna

To jak to spiąć żeby metoda przypisywała np po zaznaczeniu kobieta wspołczynnik 0.6 a po zaznaczeniu mężczyzna 0.7

Nie znam jakoś super web-mvc, ale wg mnie powinieneś używać elemntów z Thymleaf, a nie gołego html. Do przechowywanie wartości jest pole th:value. Nie służy ono do wyświetlania tekstu dla użytkownika - od tego jest label chyba.

 

Nie lepiej coś takiego sobie w javaScript napisać nie mówiąc już o tym iż ten język jest teraz na topie do tego możesz sobie pisać w nim front i backend. Nie rozumiem ludzi, którzy tworzą webówke w Javie...

Nie lepiej. To są dwie różne technologie i służą do różnych rzeczy. Wystarczy się zatrudnić nad dużym projektem enterprise z branży fintech, HTF czy nawet sklepem online z kilkuset tysiącami produktów i backend będzie w Javie/.NET. HTF może wybierze jeszcze C++. JS z Node.JS to nie jest cudowne lekarstwo na wszystko. Jest wiele rzeczy do których Node.JS się nie nadaje. Do tego twierdzenie, że JS jest na topie jest mocno na wyrost. Jest na topie we froncie, bo nie ma konkurencji. Natomiast cały ekosystem JS cierpi na choroby wieku dziecięcego. Profile aplikacji, build toole, zarządzanie dependencjami - to wszystko jest lata za tym, co oferuje stack Javowy. Do tego bycie skazanym na jeden język brzmi jak kara. Na przykład Java jest świetna do backendu, ale pisanie w niej testów po prostu ssie. A że pod spodem jest JVM, mogę do testów wrzucić np Groovy. Bycie przybitym do samego JS to nic fajnego. Ten język ma mnóstwo złych rozwiązań (i nieco dobrych również).

 

znajac jave + podstawy springa dostanie sie bardzo szybko dobra praca. Obecnie przebywam za granica i najbardziej rozchwytywane jezyki to C++ i Java + Spring właśnie. JavaScript juz nie aż tak bardzo. Mam paru znajomych co pracuja w webówce i wszyscy siedzą w springu wiec wszystko zależy od lokacji :P

W Polsce zarówno .NET, Java + Spring, jak i JS oferują setki dobrze płatnych ofert pracy od ręki w Wawie, Krk, Wroc czy Trójmieście w komfortowych warunkach. Na C++ ofert jest sporo mniej. W małych miastach lepiej zrobić kurs na wózek widłowy. ;)

 

IMO dyskusja na temat technologii i rynku pracy to powinien być osobny temat.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Robienie backendu w zepsutym środowisku Javy do obliczenia, które mogłoby być jednolinijkowcem w JSie, to trochę przerost formy nad treścią. Jak kolega wyżeeej zauważył, skracaj sobie pracę poprzez adnotacje. A do testowania endpointów polecam Postmana, dobrze jest postrzelać dla testów.

 

Co do technologii to dzisiaj trzeba trochę szerzej polecieć, bo znajomość jednej jest niewystarczająca.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

znajac jave + podstawy springa dostanie sie bardzo szybko dobra praca. Obecnie przebywam za granica i najbardziej rozchwytywane jezyki to C++ i Java + Spring właśnie. JavaScript juz nie aż tak bardzo. Mam paru znajomych co pracuja w webówce i wszyscy siedzą w springu wiec wszystko zależy od lokacji :P

Siedzą w webowce bez znajomości JS'a/TS'a? Ciekawe :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • RX 6700 XT do  ryzena 5 2600.  Mocny strzał w stopę? za pół roku kupię jakiś lepszy procek( najniższa krajowa here )   Do tego psu XPG Pylon 650W Udzwignie?
    • Oj tak, oj tam, nie wiem co zmywakowi znowu się wylało dla zdobycia oglądalności, ale brytyjskie szkoły dobre są....problem w tym, że nie wszystkie  UK to kraj z dużym rozwarstwieniem społecznym i to będzie widoczne także i w szkolnictwie.  Jeżeli się mieszka w tzw councilówce (osiedle domów socjalnych, posiadanych przez lokalne władze i wynajmowanych długoterminowo lokatorom z niskimi dochodami poniżej wartości czynszów komercyjnych) i daje dzieciaka do szkoły w councilówce, a do tego zaniedbuje go tak samo, jak zaniedbują swoje g*****niaki councilowi obywatele, to rzeczywiście, w przyszłości takie dziecko wyrośnie najprawdopodobniej na kolejnego councilowego obywatela z aspiracjami co najwyżej na poziomie bycia lokalnym przedstawicielem firmy farmaceutycznej sprzedającej znieczulające życiowo specyfiki    Dziecko zadbane, wychowane będzie mogło dużo osiągnąć. Prawie wszystko, bo do wszystkiego to niestety trzeba wysłać dzieciaka do jakiegoś Eton College czy cóś. Tam może nie będzie już bardziej mądrzejsze, ale nabędzie kontaktów
    • Chyba Godzillę junior - trochę mała. Ta "losowość" jest świetna w tej grze. Walczyłem ze smokiem i zaraz podleciał gryf i nawzajem się naparzali. Oczywiście wykorzystałem sytuację i pojąłem walkę z dwoma przeciwnikami. Albo jechałem bryczką i gryf wleciał w nią i rozwalił na strzępy czy cyklop, który wpadł do miasta. Dużo takich podobnych akcji jest w tej grze. Nawet jeśli są to tylko skrypty, to nie widziałem czegoś podobnego w innych grach.   Dialogi jeszcze by przeszły, ale nazwy przedmiotów i umiejętności wolałbym mieć oryginalne. Może wyglądają takie akcje śmiesznie i jak był bug, ale dla mnie właśnie czyni tę grę wyjątkową. Lubię to.
    • @galakty Nic. Póki będzie działał nikt nie będzie kazał go demontować, no chyba że kamienica będzie bardzo niskiej klasy energetycznej i trzeba będzie to zrobić by ją podnieść, ale na to są też inne sposoby. Zatem dotąd dokąd będzie sprawny, będzie można go używać. Potem tak jak napisał @RimciRimci ale w dyrektywie jest też opcja używania źródeł na biopaliwa i paliwa alternatywne, zatem dalej zostaje piec na biogaz czy na inne biopaliwa.
    • Polemizowałbym. Wg mnie na to właśnie liczą rządzący, aby ludzie kupili ściemę nazewniczą. Składka ubezpieczeniowa polega na tym, że jest stała. Kup sobie jakiekolwiek ubezpieczenie w prywatnej firmie albo chociaż przeczytaj regulamin oferty. Płacisz stałą składkę x i masz ubezpieczenie od wymienionych zdarzeń na kwotę y oraz pokrycie kosztów leczenia do kwoty z. Tak działają u nas składki społeczne dla DG. Płacisz x i dostaniesz y emerytury/renty/chorobowego (gdzie y w magiczny sposób dla kolejnych roczników dąży do 0). Opłata NFZ jest wyliczana jako procent od dochodu, więc w moim odczuciu jest to podatek a nie składka. Na UoP z kolei wszystkie "składki" są podatkiem naliczanym procentowo od przychodu. Plus NFZ względem prywatnych ubezpieczeń taki, że nie masz limitu kosztów leczenia (o ile się załapiesz na termin w publicznej służbie zdrowia i uważasz ją za satysfakcjonującą). Tak więc dla mnie bliżej tu do podatku, ale też dostajesz "więcej" niż w składkowym ubezpieczeniu. Ja płacę niezbędne minimum do wspólnej skarbonki (kosza), a prywatne mam kupione ubezpieczenie na rok utraty dochodów plus do 2mln kosztów leczenia za granicą.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...