From db216c54f350a49d5a9462c169f964ff544315da Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 02:31:13 +0000 Subject: [PATCH 1/2] Phase 4: Migrate all views from JSP/JSF to Thymeleaf with layout dialect - Add base layout template using Thymeleaf Layout Dialect (layout:decorate) - Add fragment templates: header, footer, loggedoff-menu, loggedon-menu - Replace placeholder page templates with full implementations: - welcome.html: Landing page with loggedoff menu - logon.html: Login form with validation errors, table layout - mainMenu.html: Post-login menu with user greeting - registration.html: Full registration/edit form with subscription list - subscription.html: Create/edit/delete subscription form - changePassword.html: Expired password page - All templates use layout:decorate to extend base layout - Conditional menu display based on session user state - Form validation errors displayed with th:errors - Internationalized text via #{} message expressions - CSS classes match original JSP styling (form-background, list-background, etc.) All 160 existing tests pass. Co-Authored-By: Jack Meigel --- .../resources/templates/changePassword.html | 17 +- .../resources/templates/fragments/footer.html | 8 + .../resources/templates/fragments/header.html | 8 + .../templates/fragments/loggedoff-menu.html | 10 ++ .../templates/fragments/loggedon-menu.html | 10 ++ .../main/resources/templates/layout/base.html | 30 ++++ .../src/main/resources/templates/logon.html | 61 +++++-- .../main/resources/templates/mainMenu.html | 22 ++- .../resources/templates/registration.html | 149 +++++++++++++----- .../resources/templates/subscription.html | 118 ++++++++++---- .../src/main/resources/templates/welcome.html | 21 ++- 11 files changed, 345 insertions(+), 109 deletions(-) create mode 100644 apps/example2-spring-boot/src/main/resources/templates/fragments/footer.html create mode 100644 apps/example2-spring-boot/src/main/resources/templates/fragments/header.html create mode 100644 apps/example2-spring-boot/src/main/resources/templates/fragments/loggedoff-menu.html create mode 100644 apps/example2-spring-boot/src/main/resources/templates/fragments/loggedon-menu.html create mode 100644 apps/example2-spring-boot/src/main/resources/templates/layout/base.html diff --git a/apps/example2-spring-boot/src/main/resources/templates/changePassword.html b/apps/example2-spring-boot/src/main/resources/templates/changePassword.html index cd95680af..060298b74 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/changePassword.html +++ b/apps/example2-spring-boot/src/main/resources/templates/changePassword.html @@ -1,12 +1,17 @@ - + - Password Expired + Password Has Expired -

Password Has Expired

-

Your password has expired.

-

username

- Try Again +
+
+
+
+

Your password has expired. Please ask the system administrator to change it.

+ Try Again +
diff --git a/apps/example2-spring-boot/src/main/resources/templates/fragments/footer.html b/apps/example2-spring-boot/src/main/resources/templates/fragments/footer.html new file mode 100644 index 000000000..03a57f989 --- /dev/null +++ b/apps/example2-spring-boot/src/main/resources/templates/fragments/footer.html @@ -0,0 +1,8 @@ + + + +
+ Copyright (C) 1999-2004, The Apache Software Foundation +
+ + diff --git a/apps/example2-spring-boot/src/main/resources/templates/fragments/header.html b/apps/example2-spring-boot/src/main/resources/templates/fragments/header.html new file mode 100644 index 000000000..dfd463c48 --- /dev/null +++ b/apps/example2-spring-boot/src/main/resources/templates/fragments/header.html @@ -0,0 +1,8 @@ + + + +
+ Struts + Faces + Tiles +
+ + diff --git a/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedoff-menu.html b/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedoff-menu.html new file mode 100644 index 000000000..20b5f2820 --- /dev/null +++ b/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedoff-menu.html @@ -0,0 +1,10 @@ + + + +
+ Register +
+ Log On +
+ + diff --git a/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedon-menu.html b/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedon-menu.html new file mode 100644 index 000000000..242c1cb58 --- /dev/null +++ b/apps/example2-spring-boot/src/main/resources/templates/fragments/loggedon-menu.html @@ -0,0 +1,10 @@ + + + +
+ Edit Registration +
+ Log Off +
+ + diff --git a/apps/example2-spring-boot/src/main/resources/templates/layout/base.html b/apps/example2-spring-boot/src/main/resources/templates/layout/base.html new file mode 100644 index 000000000..7051a820d --- /dev/null +++ b/apps/example2-spring-boot/src/main/resources/templates/layout/base.html @@ -0,0 +1,30 @@ + + + + Struts+Tiles+Faces Example Application + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+ + diff --git a/apps/example2-spring-boot/src/main/resources/templates/logon.html b/apps/example2-spring-boot/src/main/resources/templates/logon.html index a19ee29f9..b76fb3a5e 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/logon.html +++ b/apps/example2-spring-boot/src/main/resources/templates/logon.html @@ -1,25 +1,52 @@ - + Logon -

Logon Form

-
- Error +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Logon Form
+ + +
+ + +
+ +
+ + + +
+
-
-
- - - Username Error -
-
- - - Password Error -
- -
diff --git a/apps/example2-spring-boot/src/main/resources/templates/mainMenu.html b/apps/example2-spring-boot/src/main/resources/templates/mainMenu.html index 2731360ed..15e425257 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/mainMenu.html +++ b/apps/example2-spring-boot/src/main/resources/templates/mainMenu.html @@ -1,13 +1,23 @@ - + Main Menu -

Main Menu Options

- +
+
+
+
+

+ Main Menu Options for + username +

+ +
diff --git a/apps/example2-spring-boot/src/main/resources/templates/registration.html b/apps/example2-spring-boot/src/main/resources/templates/registration.html index b64a05fc7..d40f4e047 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/registration.html +++ b/apps/example2-spring-boot/src/main/resources/templates/registration.html @@ -1,46 +1,117 @@ - + - Registration + Register + Edit Registration -

Registration

-
- -
- - - +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Enter Registration Information + Edit Your Registration Information +
+ + + + + username + + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ + + + Cancel +
+ + +
+

Current Subscriptions

+ + + + + + + + + + + + + + + +
Host NameUser NameServer TypeAutoAction
hostusernametypefalse + Delete + Edit +
+ Add
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - -
- +
diff --git a/apps/example2-spring-boot/src/main/resources/templates/subscription.html b/apps/example2-spring-boot/src/main/resources/templates/subscription.html index 1b8bc8379..817518c3f 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/subscription.html +++ b/apps/example2-spring-boot/src/main/resources/templates/subscription.html @@ -1,40 +1,90 @@ - + - Subscription + Create Subscription + Delete Subscription + Edit Subscription -

Subscription

-
- -
- - - -
-
- - - -
-
- - -
-
- - - -
-
- - -
- -
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Create New Mail Subscription + Delete Existing Mail Subscription + Edit Existing Mail Subscription +
user
+ + + + + hostname + + + +
+ + +
+ +
+ + +
+ +
+ + + + + + + + + Cancel +
+
+
diff --git a/apps/example2-spring-boot/src/main/resources/templates/welcome.html b/apps/example2-spring-boot/src/main/resources/templates/welcome.html index 16061ff6f..001a986b6 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/welcome.html +++ b/apps/example2-spring-boot/src/main/resources/templates/welcome.html @@ -1,13 +1,20 @@ - + - MailReader + MailReader Demonstration Application -

MailReader Demonstration Application Options

- +
+
+
+
+

MailReader Demonstration Application Options

+ +
From 8c359e3df413b3109ef6c9d5bc01751486cc5587 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 02:39:35 +0000 Subject: [PATCH 2/2] Fix dual-menu display on registration page Use th:block wrapper around conditional th:replace to prevent both loggedon and loggedoff menus from rendering simultaneously. The th:if on a div with th:replace had a processing order issue in Thymeleaf Layout Dialect. Co-Authored-By: Jack Meigel --- .../src/main/resources/templates/registration.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/example2-spring-boot/src/main/resources/templates/registration.html b/apps/example2-spring-boot/src/main/resources/templates/registration.html index d40f4e047..a73fb48ec 100644 --- a/apps/example2-spring-boot/src/main/resources/templates/registration.html +++ b/apps/example2-spring-boot/src/main/resources/templates/registration.html @@ -8,8 +8,12 @@
-
-
+ +
+
+ +
+