@SuppressWarnings({"unchecked", "rawtypes"})
  public void execute(
      Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
      throws TemplateException, IOException {
    Long productCategoryId =
        FreemarkerUtils.getParameter(PRODUCT_CATEGORY_ID_PARAMETER_NAME, Long.class, params);

    ProductCategory productCategory = productCategoryService.find(productCategoryId);

    List<ProductCategory> productCategories;
    if (productCategoryId != null && productCategory == null) {
      productCategories = new ArrayList<ProductCategory>();
    } else {
      boolean useCache = useCache(env, params);
      String cacheRegion = getCacheRegion(env, params);
      Integer count = getCount(params);
      if (useCache) {
        productCategories = productCategoryService.findParents(productCategory, count, cacheRegion);
      } else {
        productCategories = productCategoryService.findParents(productCategory, count);
      }
    }
    setLocalVariable(VARIABLE_NAME, productCategories, env, body);
  }
 /** 获取参数组 */
 @RequestMapping(value = "/parameter_groups", method = RequestMethod.GET)
 public @ResponseBody Set<ParameterGroup> parameterGroups(Long id) {
   Set<ParameterGroup> set = null;
   ProductCategory productCategory = productCategoryService.find(id);
   if (productCategory.getParameterGroups() == null
       || productCategory.getParameterGroups().size() <= 0) {
     List<ProductCategory> list = productCategoryService.findParents(productCategory);
     for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
       ProductCategory p = (ProductCategory) iterator.next();
       if (p.getAttributes() != null && p.getParameterGroups().size() > 0) {
         set = p.getParameterGroups();
       }
     }
   } else {
     set = productCategory.getParameterGroups();
   }
   return set;
 }