我应该如何在Spring MVC中存储共享对象以在多个JSP中使用?

时间:2014-12-07 16:31:37

标签: java spring jsp spring-mvc

我正在创建一个购物车应用程序来学习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";
    }


}

我有两个问题:

  1. 如何在Spring中存储对象categoryMap以便在多个页面中访问它?

  2. 我使用JSP和Servlets完成了相同的项目,并且已将categoryMap存储在应用程序范围中,以便我可以在多个页面中使用它。这是一种正确的方法吗?如果不是,我怎么能以更好的方式做到这一点?

  3. 请帮忙!!感谢

    编辑:我想在我的应用程序的标题中显示此类别和子类别列表,以便我可以在所有页面中使用这些。(如下图所示)

    enter image description here

    编辑:除了编写用于从每个控制器中的数据库中获取类别列表的代码之外,还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

如果每个用户的此列表不同,请保持会话范围。否则,如果它在整个应用程序中很常见,则可以使用单例范围。

最好提供所有可用的解决方案,您可以使用以下步骤: -

1.要在整个应用程序中访问列表,请将其保存在您的单件服务类中,作为类变量并通过自动装配您的服务来控制控制器。

  1. 要在标题中显示它,您需要在模型中添加它,您必须在每个控制器方法中一次又一次地将它添加到模型中。或者您可以使用annotatoin @sessionattribute将其添加为模型中的session attribue。
  2. 是的,对于完美的设计,应该有一些方法,将属性添加为应用程序级别。然而,春天没有这样的支持。