我正在創建一個購物車應用程序來學習Spring MVC。我想在多個頁面中顯示所有類別和子類別的列表。即;主頁,產品頁面,分類頁面。如何在Spring MVC中存儲共享對象以用於多個JSP?
在主頁控制器中,我檢索類別,子類別和特色產品的列表並將它們傳遞到主頁。
@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";
}
}
我有2個問題:
我如何可以存儲在Spring對象
categoryMap
訪問它在多頁?我已經使用JSP和Servlets完成了相同的項目,並且我已將
categoryMap
存儲在應用程序範圍中,以便我可以在多個頁面中使用它。這是一個正確的方法嗎?如果不是,我怎麼能以更好的方式做到這一點?
請幫忙!!由於
編輯:我想在我的應用程序的標題,顯示該類別和子類別列表,這樣我可以在所有頁面使用這些(類似下圖)
編輯:是除了編寫代碼以從每個控制器中的數據庫中獲取類別列表之外,還有其他方法可以遵循嗎?
是的,這個列表對於所有用戶都是一樣的,但是我們真的可以將數據存儲在單例作用域中嗎?你能用一個代碼示例來詳細說明你的答案嗎? – 2014-12-07 17:06:56
您會從您注入的類別中提供服務。現在該服務應該是一個在應用程序中共享的單例。這是你能做的最簡單的事情。 '@Autowired private CategoryService categoryService; '並且在你的映射中,你將從服務獲得映射:'model.addAttribute(「categoryMap」,categoryService.getYourMap());'不要把你的其他邏輯放到控制器中, – Vaelyr 2014-12-07 17:18:37
是的,你可以在你的服務中保留地圖並使用它,但是因爲多個線程將從每個控制器更新它,所以你需要使用同步來更新它的tread-safe – Panther 2014-12-07 17:21:50