2014-12-15 2 views
1

나는 이것을 배우기 위해 스프링 MVC에서 연습하고 있는데, 나는 URL 주소가있는 작업에 매달렸다. 상상의 웹 스토어에서 제품을 필터링하라는 메시지가 표시됩니다.스프링 MVC : 목록에 여러 개의 필터 추가하기

원하는 제품을 보려면 여러 기준을 적용하고 싶습니다. 예를 들어 태블릿 카테고리에 속하는 제품은 200 ~ 400 달러의 가격 범위 내에 있으며 Google에서 제조 한 것입니다.

URL은? .../웹 스토어/제품/태블릿/가격 낮은 = 200; 높은 = 400 제조 업체 = "구글"작업은 filterProducts라는 요청 매핑 방법을 만드는 것입니다

이 URL을 매핑하려면 productController 클래스에 있습니다. URL에는 가격 범위를 나타내는 낮은 높이의 행렬 변수, 제조업체를 식별하는 GET 매개 변수 제조업체 및 카테고리를 나타내는 URI 템플릿 경로 변수 태블릿이 포함됩니다.

결과를 결합하여 중복을 피하기 위해 java.util.Set을 사용할 수 있다는 힌트가 있습니다.

여기에 내 불완전 코드입니다 : 그 운동을 알고

@RequestMapping("/{category}/{byCriteria}") 
public String getProductsByManufacturer(
     @PathVariable("category") String productCategory, 
     @MatrixVariable(pathVar = "byCriteria") Map<String, List<String>> filterParams, 
     @RequestParam("manufactuer") String manufacturer, Model model) { 


    List<Product> productsCategory = productService.getProductsByCategory(productCategory); 

// ??? 

    model.addAttribute("product", ??); 

    return "products"; 
} 
+1

질문을 지정할 수 있습니까? – Marv

+0

안녕하세요 Marv, 물론. 요청 URL을 제공하기 위해 컨트롤러 메소드를 작성하는 방법은 무엇입니까? 위의 코드는 ProductController.java 파일에서 가져온 것입니다. 3 가지 변수를 모두 사용하여 세 가지 기준을 충족하는 제품을 필터링하는 방법을 알지 못합니다. "타블렛"제품 범주 변수로 모든 타블렛을 가져 와서 목록에 저장할 수있었습니다. 하지만 가격대별로 필터링하고 마침내 제조업체별로 필터링하려면 어떻게해야합니까? filterParams Map에서이 데이터를 얻는 방법과 제조업체 변수와 결합하여 제품 목록을 얻고 마침내 모델을 업데이트하는 방법? – Lemohewe

답변

0

(I 문제를 해결하는 방법을 모른다). 당신이 시도 할 수 :

@RequestMapping("/{category}/{price}") 
public String filterProducts(@PathVariable("category") String category, 
          @MatrixVariable(pathVar = "price") Map<String, List<String>> priceParams, 
          @RequestParam("manufacturer") String manufacturer, 
          Model model) { 
    Set<Product> filteredProducts = new HashSet<Product>(); 

    List<Product> productsByCategory = productService.getProductsByCategory(category); 
    List<Product> productsByManufacturer = productService.getProductsByManufacturer(manufacturer); 
    Set<Product> productsByPrice = new HashSet<Product>(); 

    BigDecimal low = new BigDecimal(priceParams.get("low").get(0)); 
    BigDecimal high = new BigDecimal(priceParams.get("high").get(0)); 
    productsByPrice.addAll(productService.getProductsByPrice(low, high)); 

    for(Product categoryProduct: productsByCategory) { 
     for(Product manufacturerProduct: productsByManufacturer) { 
      for(Product priceProduct: productsByPrice) { 
       if(priceProduct.equals(manufacturerProduct) && manufacturerProduct.equals(categoryProduct)) { 
        filteredProducts.add(priceProduct); 
       } 
      } 
     } 
    } 

    model.addAttribute("products", filteredProducts); 

    return "products"; 
} 

가 ProductRepository 및 IMPL에) (낮은 높은) 방법 getProductsByPrice을하는 것을 잊지 마십시오. 당신이 봉사했기를 바랍니다.

관련 문제