尝试使用 Thymeleaf 和 Parse 将模型渲染到 Springboot 应用程序中

Attempt to render model into Springboot application with Thymeleaf and Parse

我一直在按照本指南 http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html 学习如何使用 Thymeleaf 将数据模型呈现到 Springboot 应用程序中。我有一个函数可以从我的 Parse-Server 中检索对象列表并将它们呈现为模型属性:

@RequestMapping(value = "/requests", method = RequestMethod.GET)
    public String findRequestsByCurrentUser(Model model) {

        ParseUser currentUser = ParseUser.getCurrentUser();
        log.info(String.valueOf(currentUser.getObjectId()));

        findRequestsByCurrentUser(model, currentUser);

        return "requests";
    }    

private void findRequestsByCurrentUser(Model model, ParseUser currentUser) {
            ParseQuery<ParseObject> requestsQuery = ParseQuery.getQuery("Request");
            requestsQuery.whereContains("author", currentUser.getObjectId());
            requestsQuery.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> requestList, ParseException e) {
                    if (e == null) {
                        model.addAttribute("requests", requestList);
                    }
                }
            });
        }

这是我发送到视图的模型调试:

出于某种原因,我可以很好地渲染 currentRole。但是我无法从模式的 requests 部分呈现任何单个属性。我应该使用 request.data.requestStatus 还是 request.requestStatus?即使单独 ${request} 也不会渲染整个对象。我尝试了几种不同的方法。 None 似乎有效。这是我的 HTML:

                <center>
                    <table class="table table-striped">
                        <tr>
                            <td><b>Requested By</b></td>
                            <td><b>Reason</b></td>
                            <td><b>Requested Date</b></td>
                            <td><b>Status</b></td>
                        </tr>
                        <tr th:each="request : ${requests}">
                            <div th:switch="${request.data.requestStatus}">
                                <div th:case="Approved">
                                    <td th:text="${request.author.objectId" class="initial-name">Employee Initials
                                    </td>
                                    <td th:text="${request.requestText}">Request Description</td>
                                    <td th:text="${request.dateRequested}">Request Date</td>
                                    <td th:switch="${request.requestStatus}">
                                    <span class="red" th:case="Pending"
                                          th:text="Pending">Status</span>
                                        <span class="green" th:case="Approved"
                                              th:text="Approved">Status</span>
                                        <span class="red" th:case="Rejected"
                                              th:text="Rejected">Status</span>
                                    </td>
                                </div>
                            </div>
                        </tr>
                    </table>
                </center>

在我的 HTML 中,我遍历了 requestList 中提供的请求对象,然后检索它们的属性。

Thymeleaf 是否敏感,如果我在我的 HTML none 对象中的任何地方有一个拼写错误就会呈现?还有什么可能出错?我需要将我的 ParseObject 转换为 Java 对象吗?我需要传递 ArrayList 而不是 List 吗?

问题似乎出在列表本身的呈现上。我从 HTML 中删除了所有属性,只为列表提供了静态文本。它应该呈现 15 行静态文本,但它根本没有呈现任何内容......我想知道它可能是什么。

这似乎就是答案。它允许我将我的 ParseObjects 渲染到 Thymeleaf 中。如上所述,我需要使用 .find() 进行查询,否则 DOM 会在对象出现之前呈现,因此它们不会出现:

@RequestMapping(value = "/requests", method = RequestMethod.GET)
    public String findRequestsByCurrentUser(Model model) {

        ParseUsercurrentUser = ParseUser.getCurrentUser();
        log.info(String.valueOf(currentUser.getObjectId()));

        findRequestsByCurrentUser(model, currentUser);

        return "requests";
    }


    private void findRequestsByCurrentUser(Model model, ParseUsercurrentUser) {
        ParseQuery<ParseObject> requestsQuery = ParseQuery.getQuery(ParseConstantsUtil.CLASS_REQUEST);
        requestsQuery.whereContains(ParseConstantsUtil.REQUEST_AUTHOR, currentUser.getObjectId());
        try {
            List<ParseObject> requestsArrayList = requestsQuery.find();
            model.addAttribute("requests", requestsArrayList);
            log.info(String.valueOf(requestsArrayList));
            log.info(String.valueOf(requestsArrayList.size()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

警告: 不幸的是,由于 ParseObject 本身不为我的每个自定义字段提供访问器方法,例如,如果我的 ParseObject 有一个名为 [=23 的字段=](数据库列),我将无法使用 ${request.requestText} 在 Thymeleaf 中呈现它。相反,我必须创建一个本地数据模型(扩展 ParseObject 的 POJO),为其创建访问器,即 request.getRequestText() 返回字符串 requestText,然后将 POJO 对象传递给我的数据模型。 .

如果我找到解决方案,我会 post 在我的下一个问题中:

我认为您无需创建 pojo 即可访问您的数据。 您需要将其作为 Hashmap

访问
<td th:text="${request.data.get('requestText')}">Request Description</td>