Cześć. Korzystam z książki "Spring MVC - Przewodnik dla początkujacych"
Mam za zadanie:
Wyobraź sobie, że chcesz użyć wielu kryteriów, by wyświetlić pożądany produkt, np. produkt z kategorii tablet o cenie od 200 PLN do 400 PLN, którego producentem jest Google.
Tutaj cała instrukcja:
Ogólnie mam wszystkie metody, getProductsByPriceFilter, getProductsByManufacturer, getProductsByCategory a także products.jsp.
Nie wiem jak mam skleić tę metode kontrolera:
public class ProductController {
private final ProductService productService;
@Autowired
public ProductController(ProductService productService) {
this.productService = productService;
}
@RequestMapping("/{category}/{price}")
public String filterProducts(Model model, @PathVariable("category") String productCategory, @MatrixVariable(pathVar = "price") Map<String, List<String>> filterParams, @RequestParam("manufacturer") String manufacturer) {
...
return "products";
}
Pomoże ktoś?
///EDIT
Dodaje te 3 metody, może są potrzebne, aczkolwiek nie wydaje mi się. Chodzi mi bardziej tutaj o ten ostatni akapit "Pamiętaj, że metoda wywołana...."
public Set<Product> getProductsByFilter(Map<String, List<String>> filterParams) {
Set<Product> productsByBrand = new HashSet<>();
Set<Product> productsByCategory = new HashSet<>();
Set<String> criterias = filterParams.keySet();
if (criterias.contains("brand")) {
for (String brandName : filterParams.get("brand")) {
for (Product product : listOfProducts) {
if (brandName.equalsIgnoreCase(product.getManufacturer())) {
productsByBrand.add(product);
}
}
}
}
if (criterias.contains("category")) {
for (String category : filterParams.get("category")) {
productsByCategory.addAll(this.getProductsByCategory(category));
}
}
productsByCategory.retainAll(productsByBrand);
return productsByCategory;
}
@Override
public List<Product> getProductsByCategory(String category) {
List<Product> productsByCategory = new ArrayList<>();
for (Product product : listOfProducts) {
if (category.equalsIgnoreCase(product.getCategory())) {
productsByCategory.add(product);
}
}
return productsByCategory;
}
@Override
public List<Product> getProductsByManufacturer(String manufacturer) {
List<Product> productsByManufacturer = new ArrayList<>();
for (Product product : listOfProducts) {
if (manufacturer.equalsIgnoreCase(product.getManufacturer())) {
productsByManufacturer.add(product);
}
}
return productsByManufacturer;
}