package controller; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Subject; import service.SubjectService; import service.impl.SubjectServiceImpl; //@WebServlet("/subject/*") public class SubjectServlet extends HttpServlet { private static final long serialVersionUID = 1L; private final SubjectService subjectService = new SubjectServiceImpl(); private final service.FacultyService facultyService = new service.impl.FacultyServiceImpl(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getPathInfo(); if (action == null || action.equals("/")) action = "/list"; try { switch (action) { case "/new": showNewForm(request, response); break; case "/insert": insertSubject(request, response); break; case "/delete": deleteSubject(request, response); break; case "/edit": showEditForm(request, response); break; case "/update": updateSubject(request, response); break; case "/list": default: listSubjects(request, response); break; } } catch (SQLException e) { throw new ServletException("Database error in SubjectServlet", e); } } private void listSubjects(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { List subjects = subjectService.getAllSubjects(); request.setAttribute("listSubject", subjects); request.getRequestDispatcher("/pages/subject-list.jsp").forward(request, response); } private void showNewForm(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException { // 1. Fetch the list of faculties from the database List faculties = facultyService.getAllFaculty(); // 2. Set it as an attribute named "listFaculty" (matching your c:forEach) request.setAttribute("listFaculty", faculties); // 3. Forward to the form request.getRequestDispatcher("/pages/subject-form.jsp").forward(request, response); } private void showEditForm(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { Long id = Long.parseLong(request.getParameter("id")); Subject subject = subjectService.getById(id); if (subject == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "Subject not found"); return; } // 1. Fetch faculties so the dropdown appears List faculties = facultyService.getAllFaculty(); // 2. Set both the subject and the faculty list request.setAttribute("subject", subject); request.setAttribute("listFaculty", faculties); request.setAttribute("subject", subject); request.getRequestDispatcher("/pages/subject-form.jsp").forward(request, response); } private void insertSubject(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { String name = request.getParameter("name"); int semester = Integer.parseInt(request.getParameter("semester")); int credits = Integer.parseInt(request.getParameter("credits")); String facultyIdStr = request.getParameter("facultyid"); Long facultyId = (facultyIdStr != null) ? Long.parseLong(facultyIdStr) : null; Subject subject = new Subject(null, name, semester, credits, facultyId); subjectService.save(subject); response.sendRedirect(request.getContextPath() + "/subject/list"); } private void updateSubject(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { Long id = Long.parseLong(request.getParameter("id")); String name = request.getParameter("name"); int semester = Integer.parseInt(request.getParameter("semester")); int credits = Integer.parseInt(request.getParameter("credits")); String facultyIdStr = request.getParameter("facultyid"); Long facultyId = (facultyIdStr != null) ? Long.parseLong(facultyIdStr) : null; Subject subject = new Subject(id, name, semester, credits, facultyId); subjectService.update(subject); response.sendRedirect(request.getContextPath() + "/subject/list"); } private void deleteSubject(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException { Long id = Long.parseLong(request.getParameter("id")); subjectService.delete(id); response.sendRedirect(request.getContextPath() + "/subject/list"); } }