Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.baeldung.thymeleaf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.baeldung.thymeleaf.utils.TeacherUtils;

@Controller
public class TeacherController {

@RequestMapping(value = "/listTeachers", method = RequestMethod.GET)
public String getInfo(Model model) {
model.addAttribute("teachers", TeacherUtils.buildTeachers());

return "listTeachers.html";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.baeldung.thymeleaf.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

public class Teacher implements Serializable {

private static final long serialVersionUID = 946941572942270450L;

@NotNull(message = "Teacher ID is required.")
@Min(value = 1000, message = "Teacher ID must be at least 4 digits.")
private Integer id;

@NotNull(message = "Teacher name is required.")
private String name;

@NotNull(message = "Teacher gender is required.")
private String gender;

private boolean isActive;

private List<String> courses = new ArrayList<String>();

private String additionalSkills;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public boolean isActive() {
return isActive;
}

public void setActive(boolean isActive) {
this.isActive = isActive;
}

public List<String> getCourses() {
return courses;
}

public void setCourses(List<String> courses) {
this.courses = courses;
}

public String getAdditionalSkills() {
return additionalSkills;
}

public void setAdditionalSkills(String additionalSkills) {
this.additionalSkills = additionalSkills;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.baeldung.thymeleaf.utils;

import java.util.ArrayList;
import java.util.List;

import com.baeldung.thymeleaf.model.Teacher;

public class TeacherUtils {

private static List<Teacher> teachers = new ArrayList<Teacher>();

public static List<Teacher> buildTeachers() {
if (teachers.isEmpty()) {
Teacher teacher1 = new Teacher();
teacher1.setId(2001);
teacher1.setName("Jane Doe");
teacher1.setGender("F");
teacher1.setActive(true);
teacher1.getCourses().add("Mathematics");
teacher1.getCourses().add("Physics");

teachers.add(teacher1);

Teacher teacher2 = new Teacher();
teacher2.setId(2002);
teacher2.setName("Lazy Dude");
teacher2.setGender("M");
teacher2.setActive(false);
teacher2.setAdditionalSkills("emergency responder");

teachers.add(teacher2);

Teacher teacher3 = new Teacher();
teacher3.setId(2002);
teacher3.setName("Micheal Jordan");
teacher3.setGender("M");
teacher3.setActive(true);
teacher3.getCourses().add("Sports");

teachers.add(teacher3);

}

return teachers;
}

}
21 changes: 12 additions & 9 deletions spring-thymeleaf/src/main/resources/messages_en.properties
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
msg.id=ID
msg.name=Name
msg.gender=Gender
msg.percent=Percentage
welcome.message=Welcome Student !!!
msg.AddStudent=Add Student
msg.ListStudents=List Students
msg.Home=Home

msg.id=ID
msg.name=Name
msg.gender=Gender
msg.percent=Percentage
welcome.message=Welcome Student !!!
msg.AddStudent=Add Student
msg.ListStudents=List Students
msg.Home=Home
msg.ListTeachers=List Teachers
msg.courses=Courses
msg.skills=Skills
msg.active=Active
3 changes: 3 additions & 0 deletions spring-thymeleaf/src/main/webapp/WEB-INF/views/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ <h1>
<tr>
<td><a th:href="@{/listStudents}" th:text="#{msg.ListStudents}" /></td>
</tr>
<tr>
<td><a th:href="@{/listTeachers}" th:text="#{msg.ListTeachers}" /></td>
</tr>
</table>
</body>
</html>
50 changes: 50 additions & 0 deletions spring-thymeleaf/src/main/webapp/WEB-INF/views/listTeachers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Teacher List</title>
</head>

<body>
<h1>Teacher List</h1>
<table border="1">
<thead>
<tr>
<th th:text="#{msg.id}" />
<th th:text="#{msg.name}" />
<th th:text="#{msg.gender}" />
<th th:text="#{msg.active}" />
<th th:text="#{msg.courses}" />
<th th:text="#{msg.skills}" />
</tr>
</thead>
<tbody>
<tr th:each="teacher: ${teachers}">
<td th:text="${teacher.id}" />
<td th:text="${{teacher.name}}" />

<td><span th:if="${teacher.gender == 'F'}">Female</span> <span
th:unless="${teacher.gender == 'F'}">Male</span></td>

<td th:text="${teacher.active} ? 'ACTIVE' : 'RETIRED'" />

<td th:switch="${#lists.size(teacher.courses)}"><span
th:case="'0'">NO COURSES YET!</span> <span th:case="'1'"
th:text="${teacher.courses[0]}"></span>
<div th:case="*">
<div th:each="course: ${teacher.courses}" th:text="${course}"></div>
</div></td>

<td th:text="*{teacher.additionalSkills}?: 'UNKNOWN'" />
</tr>
</tbody>
</table>
<div>
<p>
<a th:href="@{/}" th:text="#{msg.Home}" />
</p>
</div>
</body>
</html>


Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,10 @@ public void testGetObjects() throws Exception {
public void testDates() throws Exception {
mockMvc.perform(get("/dates").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("dates.html"));
}

@Test
public void testTeachers() throws Exception {
mockMvc.perform(get("/listTeachers").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("listTeachers.html"));
}

}