如何在另一个 html 页面中访问 spring 模型的数据?

How to access data of spring model in another html page?

PlaceController.java

@GetMapping("/places")
    public String listPlaces(Model model, HttpSession session) {
        //keys and values , access this key using thymeleaf syntax ${listPlaces}
        model.addAttribute("listPlaces", placeService.getAllPlaces());
        return "place/places";
    }

我需要获取从 places.html 到 index.html 的 listPlaces 数据 我尝试创建会话,但我无法从索引页调用它

            <tbody>
                <tr  th:each="place: ${listPlaces}" >
                    <td th:text="${place.place_id}">Place Id</td>
                    <td th:text="${place.name}">Place Name</td>
                    <td th:text="${place.city_name}">City Name</td>
                    <td th:text="${place.description}">Place Description</td>
                    <td th:text="${place.longitude}">Place Longitude</td>
                    <td th:text="${place.latitude}">Place Latitude</td>
                    <td><img th:src="${'data:image/png;charset=utf-8;base64,' + place.byteToString(place.image)}" height="150px" width="150px" alt="img"></td>
                    <td th:text="${place.category}">Place Category</td>
                    <td>
                        <a th:href="@{/places/edit/{id}(id=${place.place_id})}" class="btn btn-primary">Update</a>
                        <a th:href="@{/places/{id}(id=${place.place_id})}" class="btn btn-danger">Delete</a>
                    </td>
                </tr>
            </tbody>
        </table>

我认为你在问两件事。

  1. 如何return两个端点的相同位置?
  2. 如何将 table 重复用于我的所有地点?

第一个问题的答案是有一个 IndexController,它以与 PlaceController 相同的方式填充模型。您可以创建一个 CommonAttributesService,它可以提供一种方法来填充公共属性,如下所示:

@Service
public class CommonAttributesService
{
    private PlaceService placeService;
    public CommonAttributesService(PlaceService placeService)
    {
        this.placeService = placeService;
    }

    public void fillCommonAttributes(Model model)
    {
        model.addAttribute("listPlaces", placeService.getAllPlaces());
    }
}

这样,您就不需要重复逻辑了。

第二个问题的答案是使用thymeleaf templates.

我在控制器中添加了一个带有 listPlaces 的模型属性 index.html

 @RequestMapping("/index")
    public String index(Model model) {
        model.addAttribute("listP", placeService.getAllPlaces());
        return "index";
    }

然后我在index.html

中使用
<script th:inline="javascript">
        /*<![CDATA[*/
        // Initialize and add the map
        function initMap() {
            var places = [[${listP}]];
</script>

感谢 boris-ivanov