我正在创建一个购物车应用程序来学习Spring MVC。我想在多个页面中显示所有类别和子类别的列表。即;主页,产品页面,类别页面。
在主页控制器中,我正在检索类别,子类别和特色产品列表,并将它们传递到主页。
@Controller
public class CatalogController {
@Autowired
private CategoryConfigService categoryConfigurationService;
@Autowired
private ProductConfigService productConfigurationService;
private static final Logger logger = LoggerFactory
.getLogger(CatalogController.class);
/**
* Catalog Controller method which retrieves the information required in the
* application home page(Categories,SubCategories)
*
* @return Home Page View
*/
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String returnHomePage(Model model) {
logger.info("Processing information for home page");
List<Category> categoriesList = categoryConfigurationService
.getAllCategories();
Map<Category, List<SubCategory>> categoryMap = new HashMap<Category, List<SubCategory>>();
for (Category category : categoriesList) {
List<SubCategory> subCategoryList = categoryConfigurationService
.getAllSubCategoriesByCategoryId(category.getId());
categoryMap.put(category, subCategoryList);
}
model.addAttribute("categoryMap", categoryMap);
model.addAttribute("featProd",
productConfigurationService.getFeaturedProducts());
return "home";
}
}
我有两个问题:
如何在Spring中存储对象categoryMap
以便在多个页面中访问它?
我使用JSP和Servlets完成了相同的项目,并且已将categoryMap
存储在应用程序范围中,以便我可以在多个页面中使用它。这是一种正确的方法吗?如果不是,我怎么能以更好的方式做到这一点?
请帮忙!!感谢
编辑:我想在我的应用程序的标题中显示此类别和子类别列表,以便我可以在所有页面中使用这些。(如下图所示)
编辑:除了编写用于从每个控制器中的数据库中获取类别列表的代码之外,还有其他方法吗?
答案 0 :(得分:1)
如果每个用户的此列表不同,请保持会话范围。否则,如果它在整个应用程序中很常见,则可以使用单例范围。
最好提供所有可用的解决方案,您可以使用以下步骤: -
1.要在整个应用程序中访问列表,请将其保存在您的单件服务类中,作为类变量并通过自动装配您的服务来控制控制器。
是的,对于完美的设计,应该有一些方法,将属性添加为应用程序级别。然而,春天没有这样的支持。