Spring mvc 尝试使用Thymeleaf和Parse将模型呈现到Springboot应用程序中
我一直遵循本指南学习如何使用Thymeleaf将数据模型呈现到Springboot应用程序中。我有一个函数,可以从解析服务器检索对象列表,并将其呈现为模型属性:Spring mvc 尝试使用Thymeleaf和Parse将模型呈现到Springboot应用程序中,spring-mvc,parse-platform,spring-boot,thymeleaf,parse4j,Spring Mvc,Parse Platform,Spring Boot,Thymeleaf,Parse4j,我一直遵循本指南学习如何使用Thymeleaf将数据模型呈现到Springboot应用程序中。我有一个函数,可以从解析服务器检索对象列表,并将其呈现为模型属性: @RequestMapping(value = "/requests", method = RequestMethod.GET) public String findRequestsByCurrentUser(Model model) { ParseUser currentUser = ParseUser.ge
@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);
}
}
});
}
在我的HTML中,我迭代requestList中提供的请求对象,然后检索它们的属性
Thymeleaf是否敏感,以至于如果我的HTML中有一个输入错误,所有对象都不会呈现?还有什么可能出错?我是否需要将我的ParseObject强制转换为Java对象?我是否需要传递ArrayList而不是List
问题似乎出在列表本身的呈现上。我从HTML中删除了所有属性,只为列表提供了静态文本。它应该呈现15行静态文本,但它根本不呈现任何内容。。。我不知道会是什么。这似乎是答案。它允许我将ParseObject渲染成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();
}
}
@RequestMapping(value=“/requests”,method=RequestMethod.GET)
公共字符串findRequestsByCurrentUser(模型){
ParseUsercurrentUser=ParseUser.getCurrentUser();
log.info(String.valueOf(currentUser.getObjectId());
findRequestsByCurrentUser(型号,currentUser);
返回“请求”;
}
私有void findRequestsByCurrentUser(模型模型,ParseUsercurrentUser){
ParseQuery requestsQuery=ParseQuery.getQuery(ParseConstantsUtil.CLASS_请求);
requestsQuery.whereContains(ParseConstantsUtil.REQUEST_AUTHOR,currentUser.getObjectId());
试一试{
List requestsArrayList=requestsQuery.find();
model.addAttribute(“请求”,requestsArrayList);
log.info(String.valueOf(requestsArrayList));
log.info(String.valueOf(requestsArrayList.size());
}捕获(解析异常){
e、 printStackTrace();
}
}
警告:不幸的是,由于ParseObject本身没有为我的每个自定义字段提供访问器方法,例如,如果我的ParseObject有一个名为“requestText”(数据库列)的字段,我将无法使用${request.requestText}
在Thymeleaf中呈现它。相反,我必须创建一个本地数据模型(扩展ParseObject的POJO),为它创建访问器,即request.getRequestText()返回字符串requestText
,然后将POJO对象传递给我的数据模型
如果我找到了解决方案,我将在下一个问题中发布:我认为您无需创建pojo即可访问数据。 您需要以Hashmap的形式访问它
<td th:text="${request.data.get('requestText')}">Request Description</td>
请求描述
我对Parse一无所知,但是findInBackground这个名字,以及它以回调作为参数的事实,强烈地表明填充请求已经完成。。。在后台,由另一个并发线程执行,因此在执行解析查询时,在调用done()方法之前,以及在将请求存储在模型中之前呈现页面。javadoc()证实了这一点。@JBNizet在呈现页面之前,您对如何在模型中存储Request ParseObject有什么建议吗?使用find(),而不是findInBackground()。这确实让指针移动了!现在它只是抱怨变量名不是公共的:org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“org.parse4j.ParseObject”的对象上找不到属性或字段“requestText”-可能不是公共的?
因此解决方案的其余部分可能只是HTML方面的,也许…我现在绝对可以渲染所有对象。我把一些静态文本放进了循环中,循环了15次。只需要找出在Thymeleaf中显示ParseObject的语法。非常感谢!当我有一个完整的解决方案时,我可能会发布一个答案。谢谢!值得一试,但它给了我同样的错误。现在它正在抱怨数据属性:org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“org.parse4j.ParseObject”的对象上找不到属性或字段“data”-可能不是公共的?
它可以工作!请求描述工具!可能是数据属性不是公共的或者没有getData方法的问题。是的,提供的对象不是公共的!幸运的是,Parse是开源的,因此可以重写它,或者至少可以在其中写入一个访问器方法。干杯
<td th:text="${request.data.get('requestText')}">Request Description</td>