Cześć.
Zaznaczam na wstępie, że studiuje kierunek , który nie ma powiązania z informatyką, mieliśmy jednak jave jako przedmiot obieralny i spodobało mi się to więc zacząłem sobie coś tam próbować w ramach zabawy.

Chciałem sobię napisać kalkulator, który szacuje ilość promili alkoholu. Napisałem go w najbardziej uproszczony sposób jednak chciałbym to teraz usprawnić. Najpierw mój kod:

Klasa modelowa:

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


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

    public CalculatorFromData(){}

    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;
    }


}

Następnie klasa z metodą:

@Component
public class Calculator {

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


}

I tu już mam pierwszy problem ale o tym zaraz. Następnie Controller

@Controller
public class CalculatorController {
@Autowired
Calculator calculator;

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

    @RequestMapping(path="/breathalyser", method = RequestMethod.POST)
    public String add(@ModelAttribute("operationModel") CalculatorFromData calculatorFromData, Model model) {
        model.addAttribute("result", calculator.calculate(calculatorFromData.getAlcoholInGrams(), calculatorFromData.getCoeffieicient(), calculatorFromData.getBodyweight()));
        return "calculatorform";
    }
}

I na koniec formularz

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"
      xmlns:c="http://www.w3.org/1999/XSL/Transform">

<head>

    <title>Kalkulator promili we krwi</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <link rel="stylesheet" th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap.min.css}" />


    <script th:src="@{/webjars/jquery/3.2.1/jquery.min.js}"></script>
    <script th:src="@{/webjars/bootstrap/3.3.7/js/bootstrap.min.js}"></script>
    <div><font color="black" size="5"><center><b>WIRTUALNY ALKOMAT</b></center> </font> </caption></div>
</head>
<body style="background-color: burlywood">

<div class="container" >

    <form class="list-inline"  th:object="${operationModel}" th:action="@{/breathalyser}" 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">Oblicz</button>
        </div>
        <div>

            <font size="4">

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

        </div>

    </form>

        <div class="container">



            <table class="table"  border="5" cellpadding="7" >
                <caption align="align" ><font color="black"><center><b> TABELA - DOPUSZCZALNA ILOŚĆ ALKOHOLU WE KRWI</b></center></font> </caption>
                <thead>
                <tr>
                    <td><font size="3"><b>Limit alkoholu w 100ml krwi</b></font></td>
                    <td><font size="3"><b>Kraje Europy</b></font></td>

                </tr>
                </thead>
                <tbody>
                <tr>
                    <td><b>0 promila</b></td>
                    <td><b>Czechy,Węgry,Włochy,Rumunia,Słowacja</b></td>
                <tr>
                <tr>
                    <td><b>0.2 promila</b></td>
                    <td><b>Cypr,Estonia,Polska,Szwecja</b></td>
                <tr>
                <tr>
                    <td><b>0.4 promila</b></td>
                    <td><b>Litwa</b></td>
                <tr>
                <tr>
                    <td><b>0.5 promila</b></td>
                    <td><b>Austria,Belgia,Bułgaria,Niemcy,Finlandia,Hiszpania,Włochy,Portugalia</b></td>
                <tr>
                <tr>
                    <td><b>0.8 promila</b></td>
                    <td><b>Malta,Wielka Brytania, Walia</b></td>

                </tr>
                </tbody>
            </table>



        </div>
    <div><font size="4">INNE KALKULATORY:</font></div>
    <div class="row">
        <a href="/bmi"><font size="3"> KALKULATOR BMI</font></a>
    </div>
    <div class="row">
        <a href="/bmr"><font size="3"> KALKULATOR BMR</font></a>
    </div>

</div>
</body>
</html>

I teraz moich kilka pytań:

  1. Chciałbym żeby zamiast pola coeffiecient mieć po prostu radio button, w którym się zaznacza czy jest się kobietą czy mężczyzną i wtedy automatycznie metoda policzy dla kobiety 0.6 dla mężczyzny 0.7 . Po stronie metody wystarczy jakiegoś ifa zrobić? A jak na froncie to napisać?
    2)Chciałbym żeby przy rezultacie wyższym niż 0.2 pojawiał się np komunikat "wytrzeźwiej zanim wsiądziesz do auta"
 Wynik:</font> <span th:if="${result != null}" th:text="${result}"></span>

W tym wypadku muszę chyba skorzystać z choose? Tylko też mi to nie wychodzi, nie wiem czemu...
3) Nie do końca rozumiem jak korzystać z css. Stworzyłem sobie plik style css i dodałem w pliku html aby korzystał z tych styli. Chciałbym np żeby formularz znajdował się na tle jakiegoś obrazka.

<form class="list-inline" id ="form" myślałem że dopisanie id="form" to załatwi jednak jak w style.css robię #form{ i ustawiam np background} to nic się nie dzieje... 4)Ćwicząc na innym przykładzie robiłem jeszcze walidacje, tylko wtedy robiłem tak, że jeśli były niepoprawne dane to zostawałem na tej stronie a jeśli były poprawne to robiłem redirect na inną stronę. Tutaj natomiast wynik wyświetla się na tej samej stronie. Jak to zrobić zeby wynik przy złych danych się nie wyświetlał... 5) I ostatnie pytanie, kwestia wizualna.. jak zmienić żeby te pola (field) formularza były mniejsze... wpisując takie dane jak waga itp nie muszą być one aż tak szerokie Z góry dzięki za podpowiedzi i wszelką pomoc.