Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20240528-BJava
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
20240528-BJava
Commits
f3072271
Commit
f3072271
authored
Jun 26, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Time controller - wersja z szablonami Thymeleaf
parent
a6cd2156
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
195 additions
and
4 deletions
+195
-4
RootController.java
PC32-Spring/src/main/java/alx/aplikacja/RootController.java
+4
-0
TimeController.java
PC32-Spring/src/main/java/alx/aplikacja/TimeController.java
+32
-2
styl.css
PC32-Spring/src/main/resources/static/styl.css
+37
-0
index.html
PC32-Spring/src/main/resources/templates/index.html
+51
-0
wyswietl_czas5.html
PC32-Spring/src/main/resources/templates/wyswietl_czas5.html
+16
-2
wyswietl_czas6.html
PC32-Spring/src/main/resources/templates/wyswietl_czas6.html
+55
-0
No files found.
PC32-Spring/src/main/java/alx/aplikacja/RootController.java
View file @
f3072271
...
@@ -12,6 +12,10 @@ import java.time.LocalDateTime;
...
@@ -12,6 +12,10 @@ import java.time.LocalDateTime;
@Controller
@Controller
public
class
RootController
{
public
class
RootController
{
@GetMapping
(
"/"
)
public
String
spisTresci
()
{
return
"index.html"
;
}
@GetMapping
(
"/hello"
)
@GetMapping
(
"/hello"
)
// można też użyć starszej wersji: @RequestMapping("/hello")
// można też użyć starszej wersji: @RequestMapping("/hello")
...
...
PC32-Spring/src/main/java/alx/aplikacja/TimeController.java
View file @
f3072271
package
alx
.
aplikacja
;
package
alx
.
aplikacja
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.LocalTime
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Locale
;
@Controller
@Controller
...
@@ -55,11 +59,37 @@ public class TimeController {
...
@@ -55,11 +59,37 @@ public class TimeController {
dt
.
toLocalTime
(),
dt
.
toLocalDate
(),
dt
.
format
(
FORMAT_DATY
));
dt
.
toLocalTime
(),
dt
.
toLocalDate
(),
dt
.
format
(
FORMAT_DATY
));
}
}
// 2. Tworzymy odpowiedź za pomocą "szablonu" z wykorzystaniem dodatkowej technologii,
// tutaj jest to Thymeleaf, ale może być coś innego: JSP, Velocity, FreeMarker, Mustache, ...
// https://www.thymeleaf.org/
// Gdy metoda w kontrolerze w wyniku zwraca String, a nie posiada adnotacji @ResponseBody,
// to Spring traktuje zwracaną wartość jak nazwę szablonu,
// w odp. miejscu szuka pliku z szablonem i generuje wynik za pomocą tego szablonu.
// Gdy do szablonu chcemy przekazać jakieś dane, to dodajemy je jako atrybuty do modelu.
// Najprościej zrobić to poprzez parametr model.
@GetMapping
(
"/time5"
)
@GetMapping
(
"/time5"
)
public
String
time5
()
{
public
String
time5
(
Model
model
)
{
LocalDateTime
dt
=
LocalDateTime
.
now
();
LocalDateTime
dt
=
LocalDateTime
.
now
();
System
.
out
.
println
(
"tutaj jestem"
);
model
.
addAttribute
(
"biezacy_czas"
,
dt
);
return
"wyswietl_czas5.html"
;
return
"wyswietl_czas5.html"
;
}
}
@GetMapping
(
"/time6"
)
public
String
time6
(
Model
model
)
{
LocalDateTime
dt
=
LocalDateTime
.
now
();
model
.
addAttribute
(
"dt"
,
dt
);
List
<
LocalDate
>
dates
=
new
ArrayList
<>();
LocalDate
date
=
dt
.
toLocalDate
();
for
(
int
i
=
0
;
i
<=
5
;
i
++)
{
dates
.
add
(
date
.
plusWeeks
(
i
));
}
model
.
addAttribute
(
"futureWeeks"
,
dates
);
return
"wyswietl_czas6.html"
;
}
}
}
PC32-Spring/src/main/resources/static/styl.css
0 → 100644
View file @
f3072271
body
{
background-color
:
#FFFFCC
;
font-family
:
'Arial'
,
sans-serif
;
}
h1
{
color
:
green
;
text-align
:
center
;
}
form
{
margin
:
30px
auto
;
padding
:
20px
;
width
:
800px
;
border
:
4px
solid
blue
;
background-color
:
#AAEEFF
;
}
.wynik
{
background-color
:
#FFFFFF
;
border
:
3px
solid
green
;
margin
:
20px
auto
;
width
:
800px
;
padding
:
10px
;
color
:
green
;
}
.error
{
background-color
:
#FFFFFF
;
border
:
6px
double
red
;
margin
:
20px
auto
;
padding
:
10px
;
width
:
800px
;
color
:
red
;
font-weight
:
bold
;
}
PC32-Spring/src/main/resources/templates/index.html
0 → 100644
View file @
f3072271
<!DOCTYPE html>
<html
xmlns:th=
"http://www.thymeleaf.org"
lang=
"pl"
>
<head>
<meta
charset=
"UTF-8"
>
<title>
Aplikacja springowa - spis treści
</title>
<link
rel=
"stylesheet"
type=
"text/css"
th:href=
"@{/styl.css}"
>
</head>
<body>
<h1>
Aplikacja springowa - Spis treści
</h1>
<h2>
Przykłady pisane bezpośrednio w Controllerze
</h2>
<ul>
<li><a
th:href=
"@{/hello}"
>
Hello
</a></li>
<li><a
th:href=
"@{/ping}"
>
Ping
</a></li>
<li><a
th:href=
"@{/czas}"
>
Czas - zadanie na lekcji
</a></li>
<li><a
th:href=
"@{/time1}"
>
Czas obiektowo
</a>
(json)
</li>
<li><a
th:href=
"@{/time2}"
>
Czas tekstowo
</a></li>
<li><a
th:href=
"@{/time3}"
>
Czas tekstowo
</a>
(text/plain)
</li>
<li><a
th:href=
"@{/time4}"
>
Czas HTML w Javie
</a></li>
</ul>
<h2>
Przykłady z szablonami
</h2>
<ul>
<li><a
th:href=
"@{/time5}"
>
Czas szablon prosty
</a></li>
<li><a
th:href=
"@{/time6}"
>
Czas szablon rozbudowany
</a></li>
</ul>
<h2>
Przykład Parametry
</h2>
<ul>
<li><a
th:href=
"@{/parametry/witaj}"
>
witaj
</a></li>
<li><a
th:href=
"@{/parametry/witaj(imie='Ala')}"
>
witaj?imie=Ala
</a></li>
<li><a
th:href=
"@{/parametry/powtorz}"
>
powtorz
</a></li>
<li><a
th:href=
"@{/parametry/powtorz(tekst='Ola ma psa')}"
>
powtorz
</a>
n = 1
</li>
<li><a
th:href=
"@{/parametry/powtorz(tekst='Ala ma kota',n=10)}"
>
powtorz
</a>
n = 10
</li>
<li><a
th:href=
"@{/parametry/techniczne}"
>
parametry techniczne
</a></li>
</ul>
<h2>
Formularze
</h2>
<ul>
<li><a
th:href=
"@{/rozmowa}"
>
Rozmowa
</a></li>
<li><a
th:href=
"@{/kalkulator}"
>
Kalkulator
</a></li>
</ul>
<h2>
Przykład Blog
</h2>
<ul>
<li><a
th:href=
"@{/blog}"
>
Formularz
</a>
do wpisywania tekstów
</li>
</ul>
</body>
</html>
PC32-Spring/src/main/resources/templates/wyswietl_czas5.html
View file @
f3072271
<!DOCTYPE html>
<!DOCTYPE html>
<html
lang=
"pl"
>
<html
lang=
"pl"
xmlns:th=
"http://www.thymeleaf.org"
>
<head>
<head>
<meta
charset=
"UTF-8"
>
<meta
charset=
"UTF-8"
>
<title>
Informacja o czasie
</title>
<title>
Informacja o czasie
</title>
</head>
</head>
<body>
<body>
<h1>
Wyświetl czas 5
</h1>
<h1>
Wyświetl czas 5
</h1>
<p>
Zaraz napiszę, która godzina.
</p>
<p>
Zaraz napiszę, która godzina. Jest to: [[${biezacy_czas}]].
</p>
<p>
Inny sposób:
<strong
th:text=
"${biezacy_czas}"
>
2013-01-01 13:13:00
</strong></p>
<h3>
Wybrane pola:
</h3>
<ul>
<li
th:text=
"${biezacy_czas.year}"
></li>
<li
th:text=
"${biezacy_czas.month}"
></li>
<li
th:text=
"${biezacy_czas.monthValue}"
></li>
<li
th:text=
"${biezacy_czas.dayOfMonth}"
></li>
<li
th:text=
"${biezacy_czas.dayOfYear}"
></li>
<li
th:text=
"${biezacy_czas.dayOfWeek}"
></li>
<li
th:text=
"${biezacy_czas.hour}"
></li>
<li
th:text=
"${biezacy_czas.minute}"
></li>
<li
th:text=
"${biezacy_czas.second}"
></li>
</ul>
</body>
</body>
</html>
</html>
\ No newline at end of file
PC32-Spring/src/main/resources/templates/wyswietl_czas6.html
0 → 100644
View file @
f3072271
<!DOCTYPE html>
<html
lang=
"pl"
xmlns:th=
"http://www.thymeleaf.org"
>
<head>
<meta
charset=
"UTF-8"
>
<title>
Show Time 6
</title>
<link
rel=
"stylesheet"
type=
"text/css"
th:href=
"@{/styl.css}"
href=
"../static/styl.css"
>
</head>
<body>
<h1>
Data i czas
</h1>
<h3>
Trzy sposoby wstawiania wartości atrybutu w Thymeleaf
</h3>
<ul>
<!-- th:text oraz data-th-text to są przykłady podejścia "natural template",
czyli że plik jest poprawnym składniowo dokumentem HTML, a dodatkowe magiczne atrybuty powodują specjalne działanie"
gdy ten plik jest przetwarzany przez "silnik thymeleaf".
-->
<!-- Najbardziej zalecane podejście: dodatkowa przestrzeń nazw th
Aby to zadziałało, w HTMLu (najczęściej na samym początku) musi byś zadeklarowana przestrzeń nazw.
"Tekst, który znajduje się wewnątrz znacznika, zastąp wartością zmiennej dt"
-->
<li
th:text=
"${dt}"
>
jakaś godzina 1
</li>
<!-- atrybuty "data" wprowadzone w HTML 5
Normalnie takich atrybutów używają skrypty JS, aby w dokumencie zapamiętywać dane,
a tutaj Thymeleaf używa w innym celu.
-->
<li
data-th-text=
"${dt}"
>
jakaś godzina 2
</li>
<!-- zagnieżdżone wyrażenia / inline expressions - podejście podobne do JSP, tutaj mniej zalecane -->
<li>
to jest wynik: [[${dt}]]
</li>
</ul>
<h3>
Odwołania do elementów zagnieżdżonych
</h3>
<ul>
<!-- tak naprawdę wywołanie dt.getYear() -->
<li>
rok:
<strong
th:text=
"${dt.year}"
>
1997
</strong></li>
<li>
dzień roku:
<strong
th:text=
"${dt.dayOfYear}"
>
100
</strong></li>
<li>
dzień tygodnia:
<strong
th:text=
"${dt.dayOfWeek}"
>
MONDAY
</strong></li>
<li>
sekunda:
<strong
th:text=
"${dt.second}"
>
33
</strong></li>
<!-- Można też wywołać metodę, która coś odczyta, nawet jeśli nie nazywa się getXXX() -->
<li>
data:
<strong
th:text=
"${dt.toLocalDate()}"
>
2020-04-05
</strong></li>
<li>
czas:
<strong
th:text=
"${dt.toLocalTime()}"
>
10:44:22
</strong></li>
<li>
miesiąc:
<em
th:text=
"${dt.month}"
>
APRIL
</em></li>
</ul>
<h3>
Odczyt elementów listy
</h3>
<p>
Ten sam dzień w kolejnych tygodniach:
</p>
<ol
start=
"0"
>
<li
th:each=
"date : ${futureWeeks}"
th:text=
"${date}"
>
2022-08-01
</li>
</ol>
</body>
</html>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment