Commit 3fd6c293 by Patryk Czarnik

filtrowanie wg cen

parent 398cd873
package sklep.beans; package sklep.beans;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import sklep.db.DBConnection; import sklep.db.DBConnection;
...@@ -8,8 +9,35 @@ import sklep.db.ProductDAO; ...@@ -8,8 +9,35 @@ import sklep.db.ProductDAO;
import sklep.model.Product; import sklep.model.Product;
public class ProductBean { public class ProductBean {
private BigDecimal minPrice, maxPrice;
// Metoda wyląda jak getter, ale wewnątrznie czyta dane z bazy, a nie z własnej zmiennej. // 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 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
try(DBConnection db = DBConnection.open()) { try(DBConnection db = DBConnection.open()) {
...@@ -18,4 +46,10 @@ public class ProductBean { ...@@ -18,4 +46,10 @@ public class ProductBean {
} }
} }
public List<Product> getFilteredProducts() throws DBException {
try(DBConnection db = DBConnection.open()) {
return db.productDAO().findByPrice(minPrice, maxPrice);
}
}
} }
<%@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>
<%-- Za pomocą klasy ProductBean odczytamy z bazy listę produktów w postaci obiektowej. --%>
<jsp:useBean id="bean" class="sklep.beans.ProductBean"/>
<h2>Filtr cen</h2>
<form id="wyszukiwarka" method="get">
<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>
<%-- Kryteria wyszukiwania przysłane w parametrach z formularza przekazuję do bean za pomocą setterów. --%>
<jsp:setProperty name="bean" property="minPrice" param="min_price"/>
<jsp:setProperty name="bean" property="maxPrice" param="max_price"/>
<c:forEach var="product" items="${bean.filteredProducts}">
<div class="product">
<h3>${product.productName}</h3>
<div class="price">Cena: ${product.price}</div>
<div class="price">VAT ${product.vat * 100}%</div>
<c:if test="${not empty product.description}">
<p>${product.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