我一直在关注本指南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}
单独也不会渲染整个对象。我试过几种不同的方法。似乎没有工作。这是我的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行静态文本,但它根本不会呈现任何内容......我想知道它是什么。
答案 0 :(得分:1)
我认为您可以访问您的数据而无需创建pojo。 您需要将其作为Hashmap访问
<td th:text="${request.data.get('requestText')}">Request Description</td>
答案 1 :(得分: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有一个名为&#34; requestText&#34; (数据库专栏),我无法使用${request.requestText}
在Thymeleaf中渲染它。相反,我必须创建一个本地数据模型(扩展ParseObject的POJO),为它创建访问器,即request.getRequestText()返回字符串requestText
,然后将POJO对象传递给我的数据模型... < / p>
如果我找到解决方案,我会在下一个问题中发帖:Cannot render Object with Thymeleaf: Property or field cannot be found on object of type 'org.parse4j.ParseObject' - maybe not public?