Я пытаюсь определить список атрибутов в базовом шаблоне, который включает в себя все ссылки 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)