"Welcome To Ashok IT" "Spring Boot and MicroServices" Topic : SpringBootMVC Development -Pagination Date : 01/12/2024 (Session - 79) _____________________________________________________________________________________________________________________________ Today Session ============= * Implementing the Pagination using Spring Boot MVC Application.... EnquiryController.java ====================== package com.ashokit.controller; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import com.ashokit.dao.Enquiry; import com.ashokit.reports.PDFGenerator; import com.ashokit.services.EnquiryService; import com.lowagie.text.DocumentException; import jakarta.servlet.http.HttpServletResponse; @Controller public class EnquiryController { @Autowired private EnquiryService enquiryService; @Value("${enquires.pageSize}") private int pageSize; // getting the home page when we deployed application into server automatically // will execute this handler method @GetMapping(value = "/") public String showAllEnquires(ModelMap map) { return showEnquiresByPage(1, "enquiryName", "asc", map); } @GetMapping("/page/{pageNo}") public String showEnquiresByPage(@PathVariable(value = "pageNo") int pageNo, @RequestParam("sortField") String sortField, @RequestParam("sortDir") String sortDir, ModelMap modelMap) { Page page = enquiryService.getAllEnquiresSortByPage(pageNo, pageSize, sortField, sortDir); // Getting the list of enquires from page object List enquiresList = page.getContent(); modelMap.addAttribute("title", "Welcome To AshokIT Developing SpringBoot MVC Application......"); // pagination field attributes modelMap.addAttribute("currentPage", pageNo);//Request parameter System.out.println("page.getTotalPages()" + page.getTotalPages()); modelMap.addAttribute("totalPages", page.getTotalPages()); // 4 modelMap.addAttribute("totalItems", page.getTotalElements()); // 11' System.out.println("page.getTotalPages()" + page.getTotalElements()); // sorting fields attributes modelMap.addAttribute("sortField", sortField); //RequestParameter modelMap.addAttribute("sortDir", sortDir);//Request parameter modelMap.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc"); modelMap.addAttribute("enquires", enquiresList); return "enquires"; } @GetMapping("/export-to-pdf") public void generatePdfFile(HttpServletResponse response) throws DocumentException, IOException { response.setContentType("application/pdf"); DateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD:HH:MM:SS"); String currentDateTime = dateFormat.format(new Date()); String headerkey = "Content-Disposition"; String headervalue = "attachment; filename=ashokit_enquires_" + currentDateTime +".pdf"; response.setHeader(headerkey, headervalue); List listOfEnquires = enquiryService.getAllEnquires(); PDFGenerator generator = new PDFGenerator(); generator.generate(listOfEnquires, response); } } Enquiry.java ============ package com.ashokit.dao; import java.util.Date; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; @Entity @Table(name = "ashokit_enquires") public class Enquiry { @Id @SequenceGenerator(name = "gen", sequenceName = "enquiry_id_seq", initialValue = 3000, allocationSize = 1) @GeneratedValue(generator = "gen", strategy = GenerationType.SEQUENCE) private Integer enquiryId; @Column(name = "enquiry_name", nullable = false) private String enquiryName; @Column(name = "email", nullable = false, unique = true) private String emailId; @Column(name = "contact_no", nullable = false) private String contactNo; @Column(name = "course", nullable = false) private String course; @Column(name = "created_dt", nullable = false) @Temporal(TemporalType.DATE) private Date createdDate; public Integer getEnquiryId() { return enquiryId; } public void setEnquiryId(Integer enquiryId) { this.enquiryId = enquiryId; } public String getEnquiryName() { return enquiryName; } public void setEnquiryName(String enquiryName) { this.enquiryName = enquiryName; } public String getEmailId() { return emailId; } public void setEmailId(String emailId) { this.emailId = emailId; } public String getContactNo() { return contactNo; } public void setContactNo(String contactNo) { this.contactNo = contactNo; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public Date getCreatedDate() { return createdDate; } public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } @Override public String toString() { return "Enquiry [enquiryId=" + enquiryId + ", enquiryName=" + enquiryName + ", emailId=" + emailId + ", contactNo=" + contactNo + ", course=" + course + ", createdDate=" + createdDate + "]"; } } EnquiryDao.java =============== package com.ashokit.dao; import java.io.Serializable; import org.springframework.data.jpa.repository.JpaRepository; public interface EnquiryDao extends JpaRepository { } EnquiryService.java =================== package com.ashokit.services; import java.util.List; import org.springframework.data.domain.Page; import com.ashokit.dao.Enquiry; //POJI-POJO public interface EnquiryService { //Getting the all enquires information with out pagination public List getAllEnquires(); //Getting all enquires information with pagination public Page getAllEnquiresByPages(int pageNo,int pageSize); //Getting all enquires information with pagination and Sorting support public Page getAllEnquiresSortByPage(int pageNo,int pageSize,String sortField,String sortDirection); } EnquiryServiceImpl.java ======================= package com.ashokit.services; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import com.ashokit.dao.Enquiry; import com.ashokit.dao.EnquiryDao; @Service public class EnquiryServiceImpl implements EnquiryService { @Autowired private EnquiryDao enquiryDao; @Override public List getAllEnquires() { return enquiryDao.findAll(); } @Override public Page getAllEnquiresByPages(int pageNo, int pageSize) { Pageable pageEnquiries = PageRequest.of(pageNo-1, pageSize); return enquiryDao.findAll(pageEnquiries); } @Override public Page getAllEnquiresSortByPage(int pageNo, int pageSize, String sortField, String sortDirection) { Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortField).ascending() : Sort.by(sortField).descending(); Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort); return this.enquiryDao.findAll(pageable); } } Application.java ================ package com.ashokit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } PDFGenerator.java ================= package com.ashokit.reports; import java.io.IOException; import java.util.List; import com.ashokit.dao.Enquiry; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.CMYKColor; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import jakarta.servlet.http.HttpServletResponse; public class PDFGenerator { public void generate(List enquiryList, HttpServletResponse response) throws DocumentException, IOException { // Creating the Object of Document Document document = new Document(PageSize.A4); // Getting instance of PdfWriter PdfWriter.getInstance(document, response.getOutputStream()); // Opening the created document to change it document.open(); /*Image logoImage = Image.getInstance("images/ashokit.jpg"); logoImage.scaleAbsolute(200, 60); logoImage.setAlignment(Element.ALIGN_CENTER); document.add(logoImage);*/ // Creating font Setting font style and size Font headingFontSize = FontFactory.getFont(FontFactory.TIMES_ROMAN,18,Font.BOLD,CMYKColor.RED); // Creating paragraph Paragraph paragraph = new Paragraph("Ashok IT Enquires Information", headingFontSize); // Aligning the paragraph in the document paragraph.setAlignment(Element.ALIGN_CENTER); // Adding the created paragraph in the document document.add(paragraph); //adding two lines of spacing createEmptyLine(paragraph, 2); // Creating a table of the 4 columns PdfPTable table = new PdfPTable(4); // Setting width of the table, its columns and spacing table.setWidthPercentage(100f); table.setWidths(new int[] {20,30,30,20}); table.setSpacingBefore(5); // Creating font Setting font style and size Font font = FontFactory.getFont(FontFactory.TIMES_ROMAN); font.setColor(CMYKColor.WHITE); // Create Table Cells for the table header PdfPCell cell = new PdfPCell(); // Setting the background color and padding of the table cell cell.setBackgroundColor(CMYKColor.RED); cell.setPadding(10); // Adding headings in the created table cell or header // Adding Cell to table cell.setPhrase(new Phrase("Enquiry ID", font)); table.addCell(cell); cell.setPhrase(new Phrase("Name", font)); table.addCell(cell); cell.setPhrase(new Phrase("Email-ID", font)); table.addCell(cell); cell.setPhrase(new Phrase("Contact No", font)); table.addCell(cell); // Iterating the list of Enquires for (Enquiry enquiry : enquiryList) { // Adding Enquiry id table.addCell(String.valueOf(enquiry.getEnquiryId())); // Adding Enquiry name table.addCell(enquiry.getEnquiryName()); // Adding Enquiry email table.addCell(enquiry.getEmailId()); // Adding Enquiry ContactNo table.addCell(enquiry.getContactNo()); } // Adding the created table to the document document.add(table); // Closing the document document.close(); } private static void createEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } } application.properties ====================== # Datasource Configuration spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/31_springbootms_db spring.datasource.username=root spring.datasource.password=root # MVC Configuration server.port=1234 spring.mvc.view.prefix=/views/ spring.mvc.view.suffix=.jsp server.servlet.context-path=/31_SpringBootMVC_CourseEnquiry_App spring.web.resources.static-locations=classpath:/static/ #Hibernate Configuration spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true #custom configuration enquires.pageSize=10 enquires.jsp ============ <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> enquires.jsp

${title}


    
S.No Enquiry Name EmailId ContactNo Course Operations
${count.index + 1} ${enquiry.enquiryName} ${enquiry.emailId} ${enquiry.contactNo} ${enquiry.course} |Edit| |Delete|
pom.xml ======= org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web com.mysql mysql-connector-j runtime org.springframework.boot spring-boot-starter-test test org.apache.tomcat.embed tomcat-embed-jasper provided jakarta.servlet.jsp.jstl jakarta.servlet.jsp.jstl-api org.glassfish.web jakarta.servlet.jsp.jstl com.github.librepdf openpdf 1.3.26 OUTPUT ====== Request URL ::::::::http://localhost:1234/31_SpringBootMVC_CourseEnquiry_App/ Webpage ======= Welcome To AshokIT Developing SpringBoot MVC Application...... S.No Enquiry Name EmailId ContactNo Course Operations 1 Anil Anil@gmail.com 1232323 SpringBoot |Edit| |Delete| 2 Ashokk Ashok@gmail.com 1232323 React |Edit| |Delete| 3 Mahesh Mahesh@gmail.com 1232323 SpringBoot |Edit| |Delete| 4 Nagesh Nagesh@gmail.com 1232323232 Aws |Edit| |Delete| 5 Raja Raja@gmail.com 123232323 React |Edit| |Delete| 6 Ramesh Ramesh@gmail.com 123232323 SpringBoot |Edit| |Delete| 7 Rani Rani@gmail.com 12323232 SpringBoot |Edit| |Delete| 8 Sarath Sarath@gmail.com 1232323232 Aws |Edit| |Delete| 9 Srinivasa Srinivas@gmail.com 123232 Microservices |Edit| |Delete| 10 Sukumar Sukumar@gmail.com 1232323 Microservices |Edit| |Delete| Previous 1 2 Next Assignment ========== Exporting data into Excel document ================================== https://www.youtube.com/watch?v=qe_NrRRsuVg +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++