0

我一直在关注本指南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.requestStatusorrequest.requestStatus吗?即使${request}单独也不会渲染整个对象。我尝试了几种不同的方法。似乎没有一个工作。这是我的 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 中的任何地方有一个错字,所有对象都不会呈现?还有什么问题?我需要将我的 ParseObject 转换为 Java 对象吗?我需要传递 ArrayList 而不是 List 吗?

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

4

2 回答 2

1

我认为您无需创建 pojo 即可访问您的数据。您需要以 Hashmap 的形式访问它

<td th:text="${request.data.get('requestText')}">Request Description</td>
于 2017-04-04T09:03:29.803 回答
0

这似乎是答案。它允许我将我的 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 有一个名为“requestText”(数据库列)的字段,我将无法将其呈现在百里香使用${request.requestText}. 相反,我必须创建一个本地数据模型(扩展 ParseObject 的 POJO),为其创建访问器,即 request.getRequestText() 返回字符串requestText,然后将 POJO 对象传递给我的数据模型......

如果我找到解决方案,我将在下一个问题中发布:无法使用 Thymeleaf 渲染对象:在“org.parse4j.ParseObject”类型的对象上找不到属性或字段 - 也许不公开?

于 2017-04-04T08:56:13.790 回答