2017-02-14 12 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

Спасибо за ваш ответ! Как вы показали в коде снайперов, атрибут модели имени пользователя всегда будет «User Name», не так ли? Итак ... Я думаю, что решения @Apollo более гибкие. Что ты думаешь? –

+1

Это зависит от ваших потребностей. Есть только два варианта. Обработчик ModelAttribute будет вызываться по каждому запросу. Если вы хотите сохранить некоторый объект в запросах определенного пользователя (сеанса), вы можете использовать либо атрибуты @SessionAttributes, либо просто поместить этот объект вручную в сеанс. Если вы задаете имя пользователя вошедшего в систему пользователя, то (скорее всего) сам пользователь уже находится в сеансе, верно? – Ivan