Commit 7f38e98c by Patryk Czarnik

Zapamiętywanie i wyświetlanie historii działań

parent 142a0a58
......@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/kalkulator")
public class Kalkulator {
private LogikaKalkulatora logikaKalkulatora = new LogikaKalkulatora();
@GetMapping
public String kalkulatorGet() {
......@@ -19,11 +20,17 @@ public class Kalkulator {
// do tej metody - wystarczy zadeklarować parametry o tej samej nazwie.
@PostMapping
public String kalkulatorPost(Model model, Long liczba1, Long liczba2, String operacja) {
LogikaKalkulatora logikaKalkulatora = new LogikaKalkulatora();
long wynik = logikaKalkulatora.oblicz(operacja, liczba1, liczba2);
model.addAttribute("wynik", wynik);
return "kalkulator.html";
}
// Ta metoda zadziała, gdy ktoś wejdzie pod adres /kalkulator/historia
@GetMapping("/historia")
public String pokazHistorie(Model model) {
model.addAttribute("historia", logikaKalkulatora.getHistoriaDzialan());
return "historia.html";
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LogikaKalkulatora {
// Ponieważ ten sam obiekt listy będzie używany w różnych zapytaniach, to może być używany przez różne wątki.
// dlatego tworzymy listę "synchronizowaną", żeby np. równoległe operacje add sobie nie przeszkadzały.
private final List<String> historiaDzialan = Collections.synchronizedList(new ArrayList<>());
public long oblicz(String operacja, long liczba1, long liczba2) {
long wynik = switch(operacja) {
......@@ -11,6 +18,12 @@ public class LogikaKalkulatora {
case "%" -> liczba1 % liczba2;
default -> 0;
};
historiaDzialan.add(String.format("%d %s %d = %s", liczba1, operacja, liczba2, wynik));
return wynik;
}
public List<String> getHistoriaDzialan() {
return Collections.unmodifiableList(historiaDzialan);
// dla zwiększenia bezpieczeństwa wątkowego, można by też zwrócić kopię
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Historia działań</title>
<link rel="stylesheet" type="text/css" th:href="@{/styl.css}" href="../static/styl.css">
</head>
<body>
<h1>Historia działań kalkulatora</h1>
<ul>
<li th:each="element: ${historia}" th:text="${element}">2 + 2 = 4</li>
</ul>
<p><a th:href="@{/kalkulator}">wróć do kalkulatora</a></p>
</body>
</html>
......@@ -35,5 +35,8 @@
Straszny błąd!
</div>
<div><a href="historia" th:href="@{/kalkulator/historia}">zobacz historię działań</a></div>
<div><a href="historia.json" th:href="@{/historia.json}">historia działań JSON</a></div>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment