Thymeleaf将java变量应用于全局模板。在每个页面中使变量可用

时间:2015-01-21 20:48:14

标签: spring data-access-layer thymeleaf

在我的全局模板中,我有菜单。

在此菜单中,我输入了select客户实体列表。

每个页面都有此菜单。

如何将该客户列表应用于全局模板用法(列表将被缓存)。

请帮忙。

---- ----- EDIT

这是我的整个主控制器:

package com.derp.common.controller;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.derp.common.dao.CustomerDao;
import com.derp.common.dao.UserDao;
import com.derp.common.model.Customer;
import com.derp.common.model.User;
import com.derp.generic.controller.GenericController;

@Controller
public class IndexController extends GenericController {
    @Autowired private CustomerDao customerDao;

    @Transactional
    @RequestMapping(value="/", method=RequestMethod.GET)
    public ModelAndView mainPage(HttpSession session) {
        ModelAndView result = new ModelAndView("home");
        result.addObject("title", "Strona główna");
        System.out.println(session.getAttribute("customersList"));
        session.setAttribute("customersList", customerDao.get());
        return result;
    }
    @Transactional
    @RequestMapping(value="/index", method=RequestMethod.GET)
    public String mainPage2(HttpSession session) {
        return "redirect:/";
    }
    @RequestMapping(value="/o_systemie", method=RequestMethod.GET)
    public ModelAndView aboutSystem(HttpSession session) {
        ModelAndView result = new ModelAndView("aboutSystem");
        result.addObject("title", "O programie");
        return result;
    }
    @RequestMapping(value="/test", method=RequestMethod.GET)
    public ModelAndView testSystem(HttpSession session) {
        ModelAndView result = new ModelAndView("test");
        result.addObject("title", "Test");
        return result;
    }
    @ModelAttribute("customers")
    public List<Customers> populateCustomers() {
        return customerDao.get();
    }
}

每个控制器方法生成自定义视图(f.e. test.html)并将其注入主视图模板(即template.html)

在这一行: session.setAttribute("customersList", customerDao.get()); 是我希望在template.html

中始终填充的数据

2 个答案:

答案 0 :(得分:1)

您还可以使用ControllerAdvice和包含控制器(类)的包名称的变量使其更通用:

@ControllerAdvice("your.package.controllers")
class Advice {
    @Autowired
    CustomerService customerService;

    @ModelAttribute("customers")
    public List<Customers> populateCustomers() {
        return customerService.findAll();
    }
}

答案 1 :(得分:0)

您可以在方法上使用@ModelAttribute,例如:

@ModelAttribute("customers")
public List<Customers> populateCustomers() {
    return this.customerService.findAll();
}

此方法用于与客户一起填充模型。然后你可以访问例如customers.size等...在您的模板中。