Как вы ссылаетесь на список атрибутов из шаблона Apache Tiles? - PullRequest
1 голос
/ 18 февраля 2011

Я пытаюсь определить список атрибутов в базовом шаблоне, который включает в себя все ссылки css, а подопределения добавят дополнительные ссылки css по мере необходимости. Я определил список в файле конфигурации определения плиток и попытался использовать список в файле template.jsp, но получаю следующую ошибку:

org.apache.tiles.template.NoSuchAttributeException: Ошибка импорта атрибутов. атрибут 'links' имеет значение null

Файл определения плиток:

    <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC 
        "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" 
        "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">       
<tiles-definitions>
    <definition name="master.template"
        template="/WEB-INF/tiles/templates/template.jsp">
        <put-attribute name="title" value="" />
        <put-attribute name="header" value="/WEB-INF/tiles/templates/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/tiles/templates/menu.jsp" />
        <put-attribute name="body" value="/WEB-INF/views/home.jsp" />
        <put-attribute name="footer" value="/WEB-INF/tiles/templates/footer.jsp" />         
        <put-list-attribute name="links" inherit="true" cascade="true">
            <add-attribute type="string" value="/stles/default.css" />
            <add-attribute type="string" value="/styles/another.css" />
        </put-list-attribute>
    </definition>
    <definition name="home" extends="master.template">
        <put-attribute name="title" value="Welcome Home" />
        <put-attribute name="body" value="/WEB-INF/views/home.jsp" />
    </definition>    
    <definition name="about" extends="master.template">
        <put-attribute name="title" value="About" />
        <put-attribute name="body" value="/WEB-INF/views/about.jsp" />

    </definition> 
</tiles-definitions>

template.jsp

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>    
        <title><tiles:insertAttribute name="title" ignore="true" /></title>         
        <!-- links -->      
        <tiles:useAttribute name="links"/>  
        <c:forEach var="href" items="${items}"> 
        <link type="text/css" rel="stylesheet" href="${href}" />
        </c:forEach>                    
    </head>
    <body>
        <div id="page">
            <div id="header"><tiles:insertAttribute name="header" /></div>
            <div id="menu"><tiles:insertAttribute name="menu" /></div>          
            <div id="body"><tiles:insertAttribute name="body" /></div>
            <div id="footer"><tiles:insertAttribute name="footer" /></div>
        </div>
    </body>
</html>

ОШИБКА HTTP 500

Проблема с доступом /. Причина:

ServletException including path '/WEB-INF/tiles/templates/template.jsp'.

Причина:

org.apache.tiles.impl.CannotRenderException: ServletException, включая путь '/WEB-INF/tiles/templates/template.jsp. в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:692) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:644) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:627) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:321) в org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel (TilesView.java:124) в org.springframework.web.servlet.view.AbstractView.render (AbstractView.java:250) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1031) в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:815) в org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:717) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:644) в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:549) в javax.servlet.http.HttpServlet.service (HttpServlet.java:617) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1166) в com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:58) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:388) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) в com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) в com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:349) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle (Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) в org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete (HttpConnection.java:923) в org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:547) в org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:212) вorg.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) в org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) в org.mortbay.thread.QueuedThreadPoolP.java: 582) Вызывается: org.apache.tiles.util.TilesIOException: ServletException, включая путь '/WEB-INF/tiles/templates/template.jsp'.в org.apache.tiles.servlet.context.ServletUtil.wrapServletException (ServletUtil.java:241) в org.apache.tiles.servlet.context.ServletTilesRequestContext.forward (ServletTilesRequestContext.java:24apserv.jas:24apservtiles.java:24apserv.j.g) или.context.ServletTilesRequestContext..java: 106) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:670) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:690) ... еще 37 причин, вызванных: org.apache.tiles.template.NoSuchAttributeException: Ошибка импорта атрибутов.Атрибут 'links' имеет значение null в org.apache.tiles.template.ImportAttributeModel.importSingleAttribute (ImportAttributeModel.java:133) в org.apache.tiles.template.ImportAttributeModel.getImported.ttributes (ImportAtttiles.78) org.jsp.taglib.UseAttributeTag.doTag (UseAttributeTag.java:175) при org.apache.jsp.WEB_002dINF.tiles.templates.template_jsp._jspService (template_jsp.java:110) в org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:3ap.jas.per.jas.per.jas.per.jas.per.jas.per.j.asas.jas.asas.j.asas.jas.asas.jas.asas.j.asas.jas.asas.jas.asas.j.asas.jas.asas.j.asas.jas.asas.jas.asas.jas.asas.j.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asas.jas.asg.jasg.gg) или org в org.gtgservlet.JspServlet.serviceJspFile (JspServlet.java:313) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:260) в com.google.appengine.tools.development.PrivilegedJspServletged: 23) на com.google.appengine.tools.development.PrivilegedJspServlet $ 2.run (PrivilegedJspServlet.java:59) на java.security.AccessController.doPrivileged (собственный метод) на com.google.appengine.tools.development.PrivilegedJspServlet.service (PrivilegedJspServlet.java:57) в javax.servlet.http.HttpServlet.service (HttpServlet.java.m7).jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:390) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHH:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WxtAppte.handle (WebAppContext.java:418) в com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) в org.mortbay.jetty.servlet.Dispatcher.forward: Dispatcher.javaorg.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:126) в org.apache.tiles.servlet.context.ServletTilesRequestContext.forward (ServletTilesRequestContext.java:241)... 42 больше

Причина:

org.apache.tiles.util.TilesIOException: ServletException, включая путь '/WEB-INF/tiles/templates/template.jsp'.в org.apache.tiles.servlet.context.ServletUtil.wrapServletException (ServletUtil.java:241) в org.apache.tiles.servlet.context.ServletTilesRequestContext.forward (ServletTilesRequestContext.java:24apserv.jas:24apservtiles.java:24apserv.j.g) или.context.ServletTilesRequestContext.dispatch (ServletTilesRequestContext.java:222) в org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write (TemplateAttributeRenderer.java:44) вorg.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render (AbstractBaseAttributeRenderer.java:106) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:670) в org.apache.ictainConl.сделать (BasicTilesContainer.java:690) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:644) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:627) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:321) в org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel (TilesView.java:124) в org.springframework.web.servstract.view.render (AbstractView.java:250) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1031) в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.j :: org.g:.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:717) в org.springframework.web.servlet.FrameworkServlet.javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.SerdoletHerlerServletHandler.java:1166) на com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:58) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFiller.Hl).на com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) на org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на com.g.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:388) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppCon418).) в com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) в com.google.app.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:349) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle6 (сервер).в org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) в org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete (HttpConnection.java:923) в org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:547) в org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:212) в org.mortbay.jetty.HttpConnection.40.jpg ().mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) в org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582), вызванный: org.apache.tiles.teceptionAtechA:импорт атрибутов.Атрибут 'links' имеет значение null в org.apache.tiles.template.ImportAttributeModel.importSingleAttribute (ImportAttributeModel.java:133) в org.apache.tiles.template.ImportAttributeModel.getImportedAttributes (ImportAttribuM)org.apache.tiles.jsp.taglib.UseAttributeTag.doTag (UseAttributeTag.java:175) в org.apache.jsp.WEB_002dINF.tiles.templates.template_jsp._jspService (template_jsp.java:110) в org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:97) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:377) в org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:313) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:260) в com.google.appengine.tools.development.PrivilegedJspServlet.access $ 101 (PrivilegedJspServlet.java:23) в com.google.appengine.tools.development.PrivilegedJspServlet $ 2.run (PrivilegedJspServlet.java:59) в java.security.AccessController.doPrivileged (Native Метод) в com.google.appengine.tools.development.PrivilegedJspServlet.service (PrivilegedJspServlet.java:57) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:390) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) в com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) в org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:327) в org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:126) в org.apache.tiles.servlet.context.ServletTilesRequestContext.forward (ServletTilesRequestContext.java:241) ... еще 42

Причина:

org.apache.tiles.template.NoSuchAttributeException: Ошибка импорта атрибутов. атрибут 'links' является нулем в org.apache.tiles.template.ImportAttributeModel.importSingleAttribute (ImportAttributeModel.java:133) в org.apache.tiles.template.ImportAttributeModel.getImportedAttributes (ImportAttributeModel.java:78) в org.apache.tiles.jsp.taglib.UseAttributeTag.doTag (UseAttributeTag.java:175) в org.apache.jsp.WEB_002dINF.tiles.templates.template_jsp._jspService (template_jsp.java:110) в org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:97) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:377) в org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:313) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:260) в com.google.appengine.tools.development.PrivilegedJspServlet.access $ 101 (PrivilegedJspServlet.java:23) в com.google.appengine.tools.development.PrivilegedJspServlet $ 2.run (PrivilegedJspServlet.java:59) в java.security.AccessController.doPrivileged (Native Метод) в com.google.appengine.tools.development.PrivilegedJspServlet.service (PrivilegedJspServlet.java:57) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:390) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) в com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) в org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:327)в org.mortbay.jetty.servlet.Dispatcher.forward (Dispatcher.java:126) в org.apache.tiles.servlet.context.ServletTilesRequestContext.forward (ServletTilesRequestContext.java:241) в org.apache.tiles.servlet.conte.ServletTilesRequestContext.dispatch (ServletTilesRequestContext.java:222) по адресу org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write (TemplateAttributeRenderer.java:44) по адресу org.apache.tiles.trefedeBaseRenDB: 106) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:670) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:690) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:644) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:627) в org.apache.tiles.impl.BasicTilesContainer.render (BasicTilesContainer.java:321 at).springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel (TilesView.java: 124) в org.springframework.web.servlet.view.AbstractView.render (AbstractView.java:250) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1031) в org.springframework.we.servlet.DispatcherServlet..Java: 717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1166) в com.google..api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:58) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (сервлет)Handler.java:1157) в com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.j).google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) по адресу org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в org.merblet.handle (ServletHandler.java:388) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в орг.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) в com.google.apphosting.utils.jetty.DevAppEngteWhandDevAppEngineWebAppContext.java:70) на org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) на com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:349) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) в org.mortbay.javaty.Server.handle6 (сервер)по адресу org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) по адресу org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete (HttpConnection.java:923) по адресу org.mortbay.jetart.par.pserp.hp: 547) в org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:212) в org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) в org.mortbay.io.nio.ndrunSelectChannelEndPoint.java:409) вorg.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582)

Ответы [ 3 ]

2 голосов
/ 13 апреля 2011

Я думаю, что есть проблема с атрибутом: inherit = "true".Поскольку вы не расширяете определение, попробуйте удалить его и посмотреть, работает ли оно.

1 голос
/ 04 мая 2012

Может быть проблема с версией jar. Проверьте совместимость версии jar.Также проверьте свою версию Dynamic-Web-Module в аспектах проекта java и версию tomcat.Например, если ваш динамический веб-модуль 3.0 и вы развертываете на Tomcat 7, могут возникнуть ошибки этого типа.

0 голосов
/ 17 марта 2014
<put-list-attribute name="links" >
        <add-attribute value="/css/style.css"/>

        <add-attribute value="/css/magnific-popup.css"/>
        <add-attribute value="/css/datepicker.css"/>
        <add-attribute value="/css/font-awesome.min.css"/>      
 </put-list-attribute>


<tiles:useAttribute id="list" name="links" classname="java.util.List"/>
    <c:forEach var="href" items="${list}"> 
        <link  rel="stylesheet" href="<c:out value='${href}'/>" />
    </c:forEach> 

Attrubute не загружается ???

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...