Почему тэг ничего не выводит
Я написал view, но <c:forEach>
не работает. Выводит только заголовок страницы
<!DOCTYPE html>
<html>
<body>
<h2>All Employees</h2>
<br>
<table>
<tr>
<th>Name</th>
<th>Surname</th>
<th>Department</th>
<th>Salary</th>
</tr>
<c:forEach var="empl" items="${allEmps}">
<tr>
<td>${empl.name}</td>
<td>${empl.surname}</td>
<td>${empl.department}</td>
<td>${empl.salary}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
вот мой контроллер:
package com.maksimov.spring.mvc_hibernate_aop.controller;
import com.maksimov.spring.mvc_hibernate_aop.dao.EmployeeDAO;
import com.maksimov.spring.mvc_hibernate_aop.entity.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
public class MyController {
@Autowired
private EmployeeDAO employeeDAO;
@RequestMapping("/")
public String showAllEmployees(Model model){
List<Employee> allEmployees = employeeDAO.getAllEmployees();
model.addAttribute("allEmps", allEmployees);
return "all-employees";
}
}
класс Employee:
package com.maksimov.spring.mvc_hibernate_aop.entity;
import jakarta.persistence.*;
@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@Column(name = "department")
private String department;
@Column(name = "salary")
private int salary;
public Employee() {
}
public Employee(String name, String surname, String department, int salary) {
this.name = name;
this.surname = surname;
this.department = department;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", surname='" + surname + '\'' +
", department='" + department + '\'' +
", salary=" + salary +
'}';
}
}
класс DAO:
package com.maksimov.spring.mvc_hibernate_aop.dao;
import com.maksimov.spring.mvc_hibernate_aop.entity.Employee;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
@Transactional
public List<Employee> getAllEmployees() {
Session session = sessionFactory.getCurrentSession();
Query<Employee> query = session.createQuery("from Employee", Employee.class);
List<Employee> allEmployees = query.getResultList();
return allEmployees;
}
}
View работает, но не выполняет <c:forEach>
. Я уже пробовал добавлять тег
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
но после добавления начинает выдавать ошибку
Ответы (1 шт):
Тэг <c:forEach>
относится к библиотеке тэгов JSTL. То, что тэг не работает объясняется тем, что отсутствует определение библиотеки taglib
, а также возможно в проекте не хватает зависисимости от библиотеки с имплементацией тэгов JSTL. Я уже писал в этом ответе Ошибка подключении JSTL зависимости в Maven как надо использовать JSTL на странице JSP. Если SpringBoot версии 3.2 и выше, то версия сервлетов будет 6.0, это необходимо для Jakarta EE:
Неправильно:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Правильно:
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
Ну а сама библиотека находится в репозитории:
Нужно только использовать Meven для сборки и подключить следующие зависимости:
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>