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ę.

×
×
  • Dodaj nową pozycję...