未找到属性:在带有Spring的平铺中未找到NoSuchAttributeException

未找到属性:在带有Spring的平铺中未找到NoSuchAttributeException,spring,exception,tiles,Spring,Exception,Tiles,我搜索了这个网站上所有的问题,并尝试了所有的改变,但没有运气。因此,在此处发布查询: 我得到以下例外情况: HTTP Status 500 - org.apache.tiles.template.NoSuchAttributeException: Attribute 'body' not found. type Exception report message org.apache.tiles.template.NoSuchAttributeException: Attribute 'bod

我搜索了这个网站上所有的问题,并尝试了所有的改变,但没有运气。因此,在此处发布查询:

我得到以下例外情况:

HTTP Status 500 - org.apache.tiles.template.NoSuchAttributeException: Attribute 'body' not found.

type Exception report

message org.apache.tiles.template.NoSuchAttributeException: Attribute 'body' not found.

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: org.apache.tiles.template.NoSuchAttributeException: Attribute 'body' not found.
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

root cause

org.apache.tiles.template.NoSuchAttributeException: Attribute 'body' not found.
    org.apache.tiles.template.DefaultAttributeResolver.computeAttribute(DefaultAttributeResolver.java:49)
    org.apache.tiles.template.InsertAttributeModel.resolveAttribute(InsertAttributeModel.java:187)
    org.apache.tiles.template.InsertAttributeModel.start(InsertAttributeModel.java:107)
    org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:306)
    org.apache.jsp.WEB_002dINF.views.home_jsp._jspx_meth_tiles_005finsertAttribute_005f0(home_jsp.java:146)
    org.apache.jsp.WEB_002dINF.views.home_jsp._jspService(home_jsp.java:79)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs.
Apache Tomcat/7.0.35 
我的tiles.xml如下所示:

<tiles-definitions>
  <definition name="base.definition" template="/WEB-INF/views/home.jsp">
         <put-attribute name="body" value="/WEB-INF/views/menu.jsp" />
  </definition>
</tiles-definitions>

最后,我的servlet-context.xml有以下条目:

<beans:bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
    </beans:bean>

    <!-- 
    <beans:bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <beans:property name="viewClass">
        <beans:value>
            org.springframework.web.servlet.view.tiles2.TilesView
        </beans:value>
    </beans:property>
    </beans:bean>
 -->
    <beans:bean id="tilesConfigurer" 
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <beans:property name="definitions">
        <beans:list>
            <beans:value>/WEB-INF/tiles.xml</beans:value>
        </beans:list>
    </beans:property>
    </beans:bean>

/WEB-INF/tiles.xml
有一些评论的部分,因为我尝试了这个答案从以前张贴的问题,但同样的问题发生了

我的POM.xml有以下条目(只是为了确定)


org.apache.tiles

  • 请帮忙。如果还需要什么,请询问。
    提前谢谢。

    我在tiles.xml中做了一些更改后找到了答案

    它的主要问题是不能直接使用定义。你必须扩展它,然后才能使用它

    请参阅我编辑的代码:

    <definition name="new.definition" template="/WEB-INF/layout/newlayout.jsp"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="body" value="" /> 
    <put-attribute name="menu" value="" /> 
    </definition> 
    
    <definition name="choice" extends="new.definition"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="body" value="/WEB-INF/views/choice.jsp" /> 
    <put-attribute name="menu" value="" /> 
    <put-attribute name="right" value="" /> 
        </definition> 
    
    <definition name="logout" extends="new.definition"> 
    <put-attribute name="title" value="Logging out.." />
     <put-attribute name="body" value="/WEB-INF/views/logout.jsp" />
     <put-attribute name="menu" value="" /> 
    <put-attribute name="right" value="" /> 
    </definition> 
    
    
    

    如您所见,我最初将新定义创建为“new.definition”,然后为了选择和注销,我扩展了现有的定义。

    我面临同样的问题。你找到解决办法了吗?事实上是的。您必须首先创建一个基本定义,然后扩展该定义以用于所有用途。我现在就编辑这篇文章。@ArunM:我想它也会对你有用。不幸的是,它对我不起作用。我在这里详细说明了这个问题。。
    <tiles:insertAttribute name="body" />
    
    <ul>
    <li><a href="search.htm">Search</a></li>
    <li><a href="showMessages.htm">Messages</a></li>
    <li><a href="contacts.htm">My Contacts</a></li>
    <li><a href="change.htm">Password</a></li>
    <li><a href="logout.htm">Logout</a></li>
    </ul>
    
    <definition name="new.definition" template="/WEB-INF/layout/newlayout.jsp"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="body" value="" /> 
    <put-attribute name="menu" value="" /> 
    </definition> 
    
    <definition name="choice" extends="new.definition"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="body" value="/WEB-INF/views/choice.jsp" /> 
    <put-attribute name="menu" value="" /> 
    <put-attribute name="right" value="" /> 
        </definition> 
    
    <definition name="logout" extends="new.definition"> 
    <put-attribute name="title" value="Logging out.." />
     <put-attribute name="body" value="/WEB-INF/views/logout.jsp" />
     <put-attribute name="menu" value="" /> 
    <put-attribute name="right" value="" /> 
    </definition>