BG Development


  Reply to this topicStart new topicStart Poll

> Фрагменти в thymeleaf
crazy_dog
Публикувано на: 07-05-2020, 12:45
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 154
Регистриран на: 23.02.12



Здравейте, колеги.
Използвам Spring със Thymeleaf за един проект и имам следният казус.
Направил съм си един фрагмент за листване на продукти. Ако в страницата използвам само веднъж фрагмента няма проблеми. Но ако искам да използвам фрагмента няколко пъти на една и съща страница имам проблем със зареждането на данните за фрагментите. Всичко фрагменти започват да показват едни и същи данни.
Някой сблъсквал ли се е с този проблем?

P.S
Примерен фрагмент:
CODE

<div class="container py-5" th:fragment="product_list">
  <link href="products_list.css" th:href="@{css/product_list.css}" rel="stylesheet">
  <div class="row text-center text-white mb-5">
     <div class="col-lg-7 mx-auto">
        <h1 class="display-4" th:text=${productListTitle}>Product List</h1>
     </div>
  </div>
  <div class="row">
     <div class="col-lg-8 mx-auto">
        <!-- List group-->
        <ul class="list-group shadow">
           <!-- list group item-->
           <li th:each="item : ${items}" class="list-group-item">
              <!-- Custom content-->
              <div class="media align-items-lg-center flex-column flex-lg-row p-3">
                 <div class="media-body order-2 order-lg-1">
                    <h5 class="mt-0 font-weight-bold mb-2" th:text="${item.title}">Apple iPhone XR (Red, 128 GB)</h5>
                    <p class="font-italic text-muted mb-0 small" th:text="${item.description}">128 GB ROM | 15.49 cm (6.1 inch) Display 12MP Rear Camera | 7MP Front Camera A12 Bionic Chip Processor</p>
                    <div class="d-flex align-items-center justify-content-between mt-1">
                       <h6 class="font-weight-bold my-2" th:text="${item.price}">₹64,999</h6>
                       <ul class="list-inline small">
                          <li class="list-inline-item m-0"><i class="fa fa-star text-success"></i></li>
                          <li class="list-inline-item m-0"><i class="fa fa-star text-success"></i></li>
                          <li class="list-inline-item m-0"><i class="fa fa-star text-success"></i></li>
                          <li class="list-inline-item m-0"><i class="fa fa-star text-success"></i></li>
                          <li class="list-inline-item m-0"><i class="fa fa-star-o text-gray"></i></li>
                       </ul>
                    </div>
                 </div><img th:if=${item.image} th:src="${item.image}" alt="Image" width="200" class="ml-lg-5 order-1 order-lg-2">
              </div> <!-- End -->
           </li>
        </ul>
     </div>
  </div>
</div>


Контролера:
CODE

public ModelAndView index(ModelAndView modelAndView) {
            
      List<Item> listOfItems = .....
            
      modelAndView.setViewName("index");
       modelAndView.addObject("productListTitle", "Laptops");
       modelAndView.addObject("items", listOfItems);
            
       return modelAndView;
}


Поздрави.

Това мнение е било редактирано от crazy_dog на 07-05-2020, 13:14
PMEmail Poster
Top
crazy_dog
Публикувано на: 07-05-2020, 14:21
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 154
Регистриран на: 23.02.12



Проблема е в това, че фрагмента използва предварително дефинирани ключове по който да bind-ва данните. Но когато се извика фрагмента няколко пъти, няма как да окажеш на всеки фрагмент какви данни да използва.
PMEmail Poster
Top
crazy_dog
Публикувано на: 08-05-2020, 15:50
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 154
Регистриран на: 23.02.12



След доста ровене, това ми свърши работа:
CODE

<th:block th:if="${fragments}" th:each="fragment : ${fragments}">
     <div
             th:replace="~{shared_/fragments/__${fragment.name()}__}"
             th:with="var=${fragment}"
     />
  </th:block>


Идеята е, че за всеки фрагмент му се сетва локален обект от който да си взема данните.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0