Commit 7389d21e by Patryk Czarnik

products6 - filtr cen

parent 489bc835
package sklep.web; package sklep.web;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import sklep.db.DBConnection; import sklep.db.DBConnection;
...@@ -8,7 +9,41 @@ import sklep.db.ProductDAO; ...@@ -8,7 +9,41 @@ import sklep.db.ProductDAO;
import sklep.model.Product; import sklep.model.Product;
public class ProductBean { public class ProductBean {
private BigDecimal minPrice, maxPrice;
// Chociaż wewnętrznie zmienna jest typu BigDecimal, to gettery i settery napiszemy tak, jakby to były Stringi.
// Robimy to po to, aby w JSP zadziałało setProperty.
public String getMinPrice() {
return minPrice == null ? null : minPrice.toString();
}
public void setMinPrice(String minPrice) {
if(minPrice == null || minPrice.isEmpty()) {
this.minPrice = null;
} else {
this.minPrice = new BigDecimal(minPrice);
}
}
public String getMaxPrice() {
return maxPrice == null ? null : maxPrice.toString();
}
public void setMaxPrice(String maxPrice) {
if(maxPrice == null || maxPrice.isEmpty()) {
this.maxPrice = null;
} else {
this.maxPrice = new BigDecimal(maxPrice);
}
}
// Metoda odczytuje produkty zgodnie z ustawionymi wcześniej kryteriami (w tym przykładzie są to ceny, ale może być więcej filtrów).
public List<Product> getFilteredProducts() throws DBException {
try(DBConnection db = DBConnection.open()) {
return db.productDAO().findByPrice(minPrice, maxPrice);
}
}
// Metoda wygląda jak getter, ale wewnętrznie czyta dane z bazy, a nie z własnej zmiennej. // Metoda wygląda jak getter, ale wewnętrznie czyta dane z bazy, a nie z własnej zmiennej.
public List<Product> getAllProducts() throws DBException { public List<Product> getAllProducts() throws DBException {
// za każdym razem otwieramy nowe połączenie - w prawdziwej aplikacji uznalibyśmy to za mało wydajne // za każdym razem otwieramy nowe połączenie - w prawdziwej aplikacji uznalibyśmy to za mało wydajne
...@@ -17,5 +52,4 @@ public class ProductBean { ...@@ -17,5 +52,4 @@ public class ProductBean {
return productDAO.readAll(); return productDAO.readAll();
} }
} }
} }
...@@ -13,15 +13,15 @@ ...@@ -13,15 +13,15 @@
<jsp:useBean id="bean" class="sklep.web.ProductBean"/> <jsp:useBean id="bean" class="sklep.web.ProductBean"/>
<c:forEach var="a" items="${bean.allProducts}"> <c:forEach var="p" items="${bean.allProducts}">
<div class="product"> <div class="product">
<h3>${a.productName}</h3> <h3>${p.productName}</h3>
<div>Cena: ${a.price} PLN</div> <div class="price">Cena: ${p.price}</div>
<div>VAT: ${a.vat * 100}%</div> <div class="price">VAT ${p.vat * 100}%</div>
<c:if test="${not empty(a.description)}"> <c:if test="${not empty p.description}">
<div class="description">${a.description}</div> <p>${p.description}</p>
</c:if> </c:if>
</div> </div>
</c:forEach> </c:forEach>
</body> </body>
......
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lista produktów 6</title>
<link rel="stylesheet" type="text/css" href="styl.css">
</head>
<body>
<h1>Lista produktów - wersja 6 JSP z filtrem</h1>
<jsp:useBean id="bean" class="sklep.web.ProductBean"/>
<form id="wyszukiwarka" method="get">
<h2>Filtr cen</h2>
<table class="formularz">
<tr><td><label for="min_price">Cena minimalna:</label></td>
<td><input type="number" name="min_price" value="${param.min_price}"></td></tr>
<tr><td><label for="max_price">Cena maksymalna:</label></td>
<td><input type="number" name="max_price" value="${param.max_price}"></td></tr>
<tr><td><button>Szukaj</button></td></tr>
</table>
</form>
<div>Produkty o cenach
<c:if test="${not empty(param.min_price)}">
od ${param.min_price}
</c:if>
<c:if test="${not empty(param.max_price)}">
do ${param.max_price}
</c:if>
</div>
<jsp:setProperty name="bean" property="minPrice" param="min_price"/>
<jsp:setProperty name="bean" property="maxPrice" param="max_price"/>
<c:forEach var="p" items="${bean.filteredProducts}">
<div class="product">
<h3>${p.productName}</h3>
<div class="price">Cena: ${p.price}</div>
<div class="price">VAT ${p.vat * 100}%</div>
<c:if test="${not empty p.description}">
<p>${p.description}</p>
</c:if>
</div>
</c:forEach>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment