24 September 2016

JSP Servlet Phân trang sản phẩm hiển thị có Next Previous với JPA Entity Database

===Kết nối Database bằng JPA  Entity Database===
=>> Tự tạo Connection
=>> Tự tạo Method
Insert, Update, Delete
Database Mysql Workbench
Hiển thi và Phân trang 
Bài 2: Hiển thị và Nút phân trang > index.jsp
Java 2016
====================<Phần hiển thị>=====================

<table class="data"> //Hiển thị 6 sản phẩm ra ngoai màn hình 
    <tr class="data">
        <th class="data">Mã Danh Mục</th>
        <th class="data">Tên Danh Mục</th>
        <th colspan="2" class="data">URL Ảnh</th>
        <th class="data">Giá Tiền</th>
        <th colspan="2" class="data">Tùy Chọn</th>
    </tr>

<%
    ShopJpaController sdao = new ShopJpaController();
    int first = 0, last = 0, pages = 1;
    //Neu "index.jsp?pages=" pages ko co bo nho hoac rong thi lay ra pages 
    if (request.getParameter("pages") != null) {
        pages = (int) Integer.parseInt(request.getParameter("pages"));
    }
    //Lấy tổng số lượng sản phẩm có trong data bằng kết nối data kiểu JPA Entity Database
    int total = sdao.getShopCount();
    //Neu number total = 3 
    if (total <= 6) {
        first = 0; //first =0
        last = total; //last =3
    } else {
        first = (pages - 1) * 6;
        last = 6;
    }
    //Lấy danh sách san phẩm từ a đến b
    List<Shop> list = sdao.findShopEntities(last, first);
    for (Shop item : list) {
%>

<tr>
    <td class="data" id="id"><%=item.getId()%></td>
    <td class="data"><%=item.getName()%></td>
    <td class="data"><%=item.getImage()%></td>
    <td class="data"><img class="img-danhmuc" src="<%=request.getContextPath()%>/images/<%=item.getImage()%>"/></td>
    <td class="data"><%=item.getPrice()%> $</td>
    <td class="data"><a href="update-shop.jsp?id=<%=item.getId()%>">
            <img src="../mos-css/img/Text-Edit-icon.png"/></a>  -|-  
        <a href="<%=request.getContextPath()%>/ShopDeleteServlet?id=<%=item.getId()%>" onclick="return confirm('Are you sure delete?')">
            <img src="../mos-css/img/delete-file-icon.png"/></a></td>

</tr>
<%}%>
</table>

=============<Phần xử lý phân trang>=================

<ul class="pagination"> //Nút phân trang có next - previous - số
        <%
            //Button Previous
            int back = 0;
            if (pages == 0 || pages == 1) {
                back = 1;//Luon la page 1
            } else {
                back = pages - 1;//Neu pages tu 2 tro len thi back tru 1
            }
        %>
        <li><a href="product.jsp?pages=<%=back%>">«</a></li>
            <%
                //Button Number pages
                int loop = 0, num = 0;
                if ((total / 6) % 2 == 0) {
                    num = total / 6;
                } else {
                    num = (total + 1) / 6;
                }
                //Nếu total lẻ thêm 1
                if (total % 2 != 0) {
                    loop = (total / 6) + 1;

                } else {
                    //Nếu total chẵn nhỏ hơn fullpage và # fullPage thì thêm 1
                    if (total < (num * 6) + 6 && total != num * 6) {
                        loop = (total / 6) + 1;
                    } else {
                        //Nếu bằng fullPage thì không thêm
                        loop = (total / 6);
                    }
                }
                //Lap so pages
                for (int i = 1; i <= loop; i++) {%>
            <% if (pages == i) {%> 
        <li><a class="active" href="product.jsp?pages=<%=i%>"><%=i%></a></li>
            <%} else {%>
        <li><a href="product.jsp?pages=<%=i%>"><%=i%></a> </li>
            <%}
                }%>
            <%
                //Button Next
                int next = 0;
                //Nếu total lẻ
                if (total % 2 != 0) {
                    if (pages == (total / 6) + 1) {
                        next = pages;//Khong next
                    } else {
                        next = pages + 1;//Co next
                    }
                } else {
                    //Nếu total chẵn nhỏ hơn fullpage
                    //Và không fullPage thì thêm 1
                    if (total < (num * 6) + 6 && total != num * 6) {
                        if (pages == (total / 6) + 1) {
                            next = pages;//Khong next
                        } else {
                            next = pages + 1;//Co next
                        }
                    } else {
                        //Nếu fullPage đến trang cuối dừng
                        //Chưa tới trang cuối thì được next
                        if (pages == (total / 6)) {
                            next = pages;//Khong next
                        } else {
                            next = pages + 1;//Co next
                        }
                    }
                }
            %>
        <li><a href="product.jsp?pages=<%=next%>">»</a></li>
    </ul>
</div>
Để tạo được Entity JPA ShopJpaController.java  & Shop.jsp vui lòng xem lại từ đầu bài này
https://giai-ma.blogspot.com/2016/09/jpa-jsp-servlet-java-entity-database.html
JPA: ShopJpaController.java
Java 2016
public class ShopJpaController implements Serializable {

//Khi mới tạo JPA xong các bạn cần khai báo và tạo constructor như dưới đây
    //Khai báo
    private EntityManagerFactory emf;
    private EntityManager em;

    //Constructor luôn chạy emf
    public ShopJpaController() throws Exception {
        emf = Persistence.createEntityManagerFactory("Shop_BonfirePU"); //Shop_BonfirePU tên đặt trong persistence.xml
    }

    public void create(Shop shop) throws PreexistingEntityException, RollbackFailureException, Exception {
        //em = emf.createEntityManager(); luôn tạo mới em trong các method cần đến em
        //Chú ý: Nếu có utx thì thay bằng em.getTransaction()
        //Xóa code cho gọn những phần này không liên quan ví dụ này
    }

    public void edit(Shop shop) throws NonexistentEntityException, RollbackFailureException, Exception {
        //Xóa code cho gọn những phần này không liên quan ví dụ này     
    }

    public void destroy(Integer id) throws NonexistentEntityException, RollbackFailureException, Exception {
        
    }

    public List<Shop> findShopEntities() {
        //Xóa code cho gọn những phần này không liên quan ví dụ này       
    }

    public List<Shop> findShopEntities(int maxResults, int firstResult) {
        return findShopEntities(false, maxResults, firstResult);
    }

    private List<Shop> findShopEntities(boolean all, int maxResults, int firstResult) {
        try {
            em = emf.createEntityManager();
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Shop.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Shop findShop(Integer id) {
        //Xóa code cho gọn những phần này không liên quan ví dụ này
    }

    public int getShopCount() {
        try {
            em = emf.createEntityManager();
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Shop> rt = cq.from(Shop.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

    public List<Shop> findAll() {
        //Xóa code cho gọn những phần này không liên quan ví dụ này        
    }

}

Entity: Shop.java
Java 2016
package Entty;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Lonely
 */
@Entity
@Table(name = "shop")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Shop.findAll", query = "SELECT s FROM Shop s"),
    @NamedQuery(name = "Shop.findById", query = "SELECT s FROM Shop s WHERE s.id = :id"),
    @NamedQuery(name = "Shop.findByName", query = "SELECT s FROM Shop s WHERE s.name = :name"),
    @NamedQuery(name = "Shop.findByImage", query = "SELECT s FROM Shop s WHERE s.image = :image"),
    @NamedQuery(name = "Shop.findByPrice", query = "SELECT s FROM Shop s WHERE s.price = :price")})
public class Shop implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id")
    private Integer id;
    @Size(max = 45)
    @Column(name = "name")
    private String name;
    @Size(max = 45)
    @Column(name = "image")
    private String image;
    @Size(max = 45)
    @Column(name = "price")
    private String price;

    public Shop() {
    }

    public Shop(Integer id) {
        this.id = id;
    }

    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 getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Shop)) {
            return false;
        }
        Shop other = (Shop) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entty.Shop[ id=" + id + " ]";
    }
    
}

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang