2014-01-10 26 views
0

我控制器收集的信息是這樣的:我如何使用Thymeleaf

@ModelAttribute("adminMenu") 
public Collection<Menu> getAdminMenu(HttpSession session, HttpServletRequest request) { 
    Collection<Menu> menuCollection = this.stormfallService.findMenuByType("A", "A"); 
    log.debug("The collection for admin has " + menuCollection.size() + " records"); 
    session.setAttribute("adminMenu", menuCollection); 
    /*Menu menu; 
    Iterator<Menu> itr = menuCollection.iterator(); 
    while (itr.hasNext()) { 
     menu = (Menu)itr.next(); 
     log.debug("The id = " + menu.getId()); 
     log.debug("The menu text is " + menu.getMenuText()); 
     log.debug("The menu type is " + menu.getMenuType()); 
     log.debug("The menu url is " + menu.getMenuUrl()); 
     log.debug("The menu sort order is " + menu.getSortOrder()); 
     log.debug("The menu status is " + menu.getStatus()); 
    }*/ 

    return menuCollection; 
    //return null; 
} 

我認爲這是正確的,但如果沒有,告訴我應該是什麼。

我的片段是這樣的:

<div th:fragment="sidebar" class="sidebar" id="textbar"> 
    <h4>Admin Functions</h4> 
      <ul class="menu"> 
        <!-- li th:each="menu,rowStat : ${adminMenu}" --> 
        <li th:each="menu,rowStat : #{session.adminMenu}"> 
        <a href="#" th:href="${menu.menuUrl}" th:text="${menu.menuText}">Some Admin Text</a></li> 
      </ul> 
    <h4>User Functions</h4> 
      <ul class="menu"> 
        <!-- li th:each="menu,rowStat : ${userMenu}" --> 
        <li th:each="menu,rowStat : #{session.userMenu"> 
        <a href="#" th:href="${menu.menuUrl}" th:text="${menu.menuText}">Some User Text</a></li> 
      </ul> 
    <h4>Tools</h4> 
      <ul class="menu"> 
       <li><a href="#">Change Password</a></li> 
       <li><a href="#">Logout</a></li> 
      </ul> 
</div> 

當我不使用會議上,註釋掉的代碼建立菜單,但是當它進入到其他頁面,菜單消失。因此,它需要在會話中。

我得到這個新的代碼以下錯誤:

HTTP狀態500 - 請求處理失敗;嵌套異常是org.thymeleaf.exceptions.TemplateProcessingException:異常評估SpringEL表達: 「menu.menuUrl」(佈局:141)

類型異常報告

消息請求處理失敗;嵌套異常是org.thymeleaf.exceptions.TemplateProcessingException:異常評估SpringEL表達:「menu.menuUrl」(佈局:141)

描述服務器遇到阻止其完成此請求一個內部錯誤。

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "menu.menuUrl" (layout:141) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

root cause 

org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "menu.menuUrl" (layout:141) 
    org.thymeleaf.spring3.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:153) 
    org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:149) 
    org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:103) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:133) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:120) 
    org.thymeleaf.standard.processor.attr.AbstractStandardSingleAttributeModifierAttrProcessor.getTargetAttributeValue(AbstractStandardSingleAttributeModifierAttrProcessor.java:67) 
    org.thymeleaf.spring3.processor.attr.SpringHrefAttrProcessor.getTargetAttributeValue(SpringHrefAttrProcessor.java:68) 
    org.thymeleaf.processor.attr.AbstractSingleAttributeModifierAttrProcessor.getModifiedAttributeValues(AbstractSingleAttributeModifierAttrProcessor.java:59) 
    org.thymeleaf.processor.attr.AbstractAttributeModifierAttrProcessor.processAttribute(AbstractAttributeModifierAttrProcessor.java:61) 
    org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87) 
    org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212) 
    org.thymeleaf.dom.Node.applyNextProcessor(Node.java:973) 
    org.thymeleaf.dom.Node.processNode(Node.java:928) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.Document.process(Document.java:93) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011) 
    org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335) 
    org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

root cause 

org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 5): Field or property 'menuUrl' cannot be found on object of type 'java.lang.String' 
    org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:246) 
    org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:112) 
    org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:43) 
    org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:87) 
    org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:82) 
    org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93) 
    org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:94) 
    org.thymeleaf.spring3.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:138) 
    org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:149) 
    org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:103) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:133) 
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:120) 
    org.thymeleaf.standard.processor.attr.AbstractStandardSingleAttributeModifierAttrProcessor.getTargetAttributeValue(AbstractStandardSingleAttributeModifierAttrProcessor.java:67) 
    org.thymeleaf.spring3.processor.attr.SpringHrefAttrProcessor.getTargetAttributeValue(SpringHrefAttrProcessor.java:68) 
    org.thymeleaf.processor.attr.AbstractSingleAttributeModifierAttrProcessor.getModifiedAttributeValues(AbstractSingleAttributeModifierAttrProcessor.java:59) 
    org.thymeleaf.processor.attr.AbstractAttributeModifierAttrProcessor.processAttribute(AbstractAttributeModifierAttrProcessor.java:61) 
    org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87) 
    org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212) 
    org.thymeleaf.dom.Node.applyNextProcessor(Node.java:973) 
    org.thymeleaf.dom.Node.processNode(Node.java:928) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:654) 
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:637) 
    org.thymeleaf.dom.Node.processNode(Node.java:947) 
    org.thymeleaf.dom.Document.process(Document.java:93) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011) 
    org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335) 
    org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs. 
Apache Tomcat/7.0.42 

任何幫助,將不勝感激。

回答

3

您正在使用#{...}(國際化)語法而不是${...}語法。

這也解釋了以下例外,因爲#{...}的結果是String

Field or property 'menuUrl' cannot be found on object of type 'java.lang.String'

變化#{session.adminMenu}#{session.userMenu(注意失蹤}),以${session.adminMenu}${session.userMenu}分別。

+0

這會有所幫助,但現在我得到: 類型異常報告 消息請求處理失敗;嵌套的例外是org.thymeleaf.exceptions.TemplateProcessingException:無法解析爲每個「菜單,rowStat:$ {session.userMenu」(佈局:146) – Crowdness

+0

沒關係......我留下了最後}。修正了它的工作。謝謝!!!! – Crowdness

相關問題