jsp - How do you reference attribute list from Apache Tiles template -
i trying define attribute list in base template includes css links , sub definitions append additional css links needed. defined list in tiles definition configuration file , attempted use list in template.jsp file, following error:
org.apache.tiles.template.nosuchattributeexception: error importing attributes. attribute 'links' null
tiles definition file:
<?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 error 500
problem accessing /. reason:
servletexception including path '/web-inf/tiles/templates/template.jsp'.
caused by:
org.apache.tiles.impl.cannotrenderexception: servletexception including path '/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.queuedthreadpool$poolthread.run(queuedthreadpool.java:582) caused by: org.apache.tiles.util.tilesioexception: servletexception including path '/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:243) @ org.apache.tiles.servlet.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.tiles.impl.basictilescontainer.render(basictilescontainer.java:690) ... 37 more caused by: org.apache.tiles.template.nosuchattributeexception: error importing attributes. attribute 'links' null @ 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 method) @ 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 more
caused by:
org.apache.tiles.util.tilesioexception: servletexception including path '/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:243) @ org.apache.tiles.servlet.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.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) @ 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.queuedthreadpool$poolthread.run(queuedthreadpool.java:582) caused by: org.apache.tiles.template.nosuchattributeexception: error importing attributes. attribute 'links' null @ 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 method) @ 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 more
caused by:
org.apache.tiles.template.nosuchattributeexception: error importing attributes. attribute 'links' null @ 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 method) @ 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.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.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) @ 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.queuedthreadpool$poolthread.run(queuedthreadpool.java:582)
i think there problem the: inherit="true" attribute. since not extending definition, try removing , see if works.
Comments
Post a Comment