2016-06-05 3 views
0

Должен ли я использовать непосредственно мой класс DAO (например, UserDao) из шаблона тимелеафа? Или я должен использовать обертку (например, UserDaoController) со всеми интересными вызовами в UserDao?Лучшее использование вызовов mvc + thymeleaf

Мой контроллер:

@RequestMapping(value = "/hibernate", method = RequestMethod.GET) 
    public String listUsers(Model model) { 
    List<User> listUsers = userDao.list(); 

    model.addAttribute("lista", listUsers); 
    return "users/users"; 
    } 

Я думал об этом, потому что мне нужно сделать 2 выбирает (например, печать все привилегии от каждого пользователя: User -> Роли -> Privilege), и мой последний thymeleaf ужасна:

<!DOCTYPE HTML> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
    <title>Hibernate</title> 
</head> 
<body> 
    <h1>Hibernate - Users</h1> 

    <body> 
    <div align="center"> 
    <h1>Users List</h1> 
    <h2><a href="/hibernate/new">New User</a></h2> 

    <table border="1"> 
     <th>Id</th> 
     <th>Username</th> 
     <th>Email</th> 
     <th>Roles</th> 
     <th>Privileges</th> 
     <th>Actions</th> 

     <tr th:each="item : ${lista}"> 
      <td th:text="${item.id}"></td> 
      <td th:text="${item.username}"></td> 
      <td th:text="${item.email}"></td> 
      <td> 
       <ul th:each="role : ${item.getRoles()}"> 
        <li th:text="${role.name}"></li> 
       </ul> 
      </td> 
      <td> 
       <span th:each="role : ${item.getRoles()}"> 
        <ul th:each="privi : ${role.getPrivileges()}"> 
         <li th:text="${privi.name}"></li> 
        </ul> 
       </span> 
      </td> 
      <td> 
       <a th:href="@{/hibernate/edit(id=${item.id})}">Edit</a> 
       &nbsp;&nbsp;&nbsp;&nbsp; 
       <a th:href="@{/hibernate/delete(id=${item.id})}">Delete</a> 
      </td> 
     </tr> 
    </table> 
    </div> 
    </body> 
</body> 
</html> 

Спасибо, Р.

ответ

0

Говоря о MVC шаблон, не следует смешивать разные уровни. Тимелеаф всегда должен получать информацию от Контролера.

В простом веб-приложении уровень обслуживания может (но не должен) смешиваться с контроллером, но не с модельным. Если вы используете этот тип шаблона, это потому, что модель может измениться или представление может измениться, но вы всегда несете ответственность за свою логику.

Лучшее использование будет:

  • HTML в контроллер (нет логики, только просит)
  • Контроллера службы (логики)
  • службы для DAO (абстракции модели доступа)
Смежные вопросы