Spring mvc 尝试使用Thymeleaf和Parse将模型呈现到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

我一直遵循本指南学习如何使用Thymeleaf将数据模型呈现到Springboot应用程序中。我有一个函数,可以从解析服务器检索对象列表,并将其呈现为模型属性:

@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>