2017-02-14 72 views
0

我想知道如何防止Thymeleaf中同一模型的多个实例,例如:在头上显示用户名。如何防止同一模型的多个实例

<span th:text="${username}">User Name</span> 

控制器:

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String index(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "index.html"; 
} 

@RequestMapping(value = "/admin", method = RequestMethod.GET) 
public String admin(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "indexAdmin.html"; 
} 

@RequestMapping(value = "/page", method = RequestMethod.GET) 
public String page(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "page.html"; 
} 
+1

你可以把用户名被删除的会话,并且可以在thymeleaf访问它,因此你能避免重复的代码。 – Apollo

回答

0

Spring允许你做到以下几点:

@ModelAttribute("username") 
public String username() { 
    return "User Name"; 
} 

此代码将设置为正由一个封闭处理的每个请求的“用户名”属性控制器。您还可以访问几乎所有可用于@RequestMapping方法(包括模型对象本身)的参数。

如上面的注释中所述,如果您希望跨特定用户的请求保留某个对象(例如从数据库中获取并使用该实例填充模型),则可以创建@SessionAttributes处理程序或将该对象手动进入会话。

看来,“thymeleaf”标签可以从问题

+0

感谢您的回复!正如你在sniped代码中显示的那样,用户名模型属性将永远是“用户名”,不是吗?所以......我认为@Apollo解决方案更加灵活。你怎么看? –

+1

这取决于您的需求。只有两种选择。 ModelAttribute处理程序将在每个请求上被调用。如果您希望跨某个特定用户(会话)的请求保留某个对象,则可以使用@SessionAttributes或手动将该对象手动放入会话中。如果您正在设置登录用户的用户名,那么(很有可能)用户本身已经在会话中,对吧? – Ivan