2017-04-04 96 views
0

我一直在关注本指南http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html以了解如何使用Thymeleaf将数据模型呈现到Springboot应用程序中。我有一个检索从我的语法分析服务器对象的列表和使它们作为模型属性功能:无法使用Thymeleaf呈现对象:在'org.parse4j.ParseObject'类型的对象上找不到属性或字段 - 可能不公开?

@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, TmtUser currentUser) { 
    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(); 
    } 
} 

这里是模型的调试,我送我的看法:

enter image description here

我能够呈现对象,因为我可以包含静态文本而不是它的属性,它会循环15次(在查询中检索到的对象的数量)。但每当我键入request.requestTextrequest.requestStatus我得到一个错误:

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

例外:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'requestText' cannot be found on object of type 'org.parse4j.ParseObject' - maybe not public? 
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:207) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:96) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:48) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:358) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:267) ~[spring-expression-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] 
    at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:263) ~[thymeleaf-spring5-3.0.3.M1.jar:3.0.3.M1] 
    ... 116 common frames omitted 

为什么是的parseObject属性不Thymeleaf访问?

当我自己打印${request}时,我得到:[email protected],例如。我也可以检索${request.objectId}。什么是检索属性的语法? ${request.data.requestText}似乎没有任何工作...

+0

我想这是因为Thymeleaf预计,存取方法以''.getRequestText()''的形式'''$ {request.requestText}''返回String''requestText''。由于ParseObject本身没有这些方法,因此我必须在本地创建数据模型,然后将其作为Thymeleaf的模型属性传递给...因此,不是传递ParseObject,而是传递一个自定义的扩展了与我的数据模型匹配的ParseObject。我现在就试试。 – santafebound

回答

1

它工作时访问您的模型属性使用一个HashMap,绕过需要创建一个自定义的parseObject:

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