You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Pfingstl Gernot <ge...@stmk.gv.at> on 2001/06/06 16:01:11 UTC

template-taglib; nestes templates?

Is it possible to use a template in a template?
I tried following:

I have a file "/templates/main.jsp", which is the main layout for all pages
(header, content and footer area and a page title):

<%-- main.jsp --%>
<%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
<html>
<head>
	<title><template:get name='title'/></title>
	<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
	<link rel="stylesheet"
href="<%=request.getContextPath()%>/css/main.css" type="text/css">
</head>
<body>
<table>
<tr valign='top'>	<tr><td><template:get name='header'/></td></tr>
			<tr><td><template:get name='content'/></td></tr>
			<tr><td><template:get name='footer'/></td></tr>
</table>
</body>
</html>

Second step: I don't want to say all the time what header and footer to use,
so I wrote other templates (which are based on /templates/main.jsp) which
grouped some header and footer scenarios together. As an example I have
/templates/layout1.jsp: 

<%-- layout1.jsp --%
<%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
<template:insert template='/templates/main.jsp'>
	<template:put name='header' content='/header.jsp'/>
	<template:put name='footer' content='/footer.jsp'/>
	<template:put name='title'><template:get
name='title1'/></template:put>
</template:insert>

Third step: I have a JSP page, which uses layout1.jsp:

<%-- page1.jsp --%>
<%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
index1a
<template:insert template='/templates/layout1.jsp'>
	<template:put name='title1' content='Templates/Layout1'
direct='true'/> 
							<%-- I use direct
for testing only>
	<template:put name='content' content="/dok1.jsp" direct='true' />
							<%-- I use direct
for testing only>
</template:insert>

If I call page1.jsp in the browser I get an exception (see below). 
If I change the line "<template:put name='title'><template:get
name='title1'/></template:put>"
in layout1.jsp to "<template:put name='title'>some static
text</template:put>" everything goes right!
Can I use nested templates?
If yes, how can I use them?

The exception text:

500 Internal Server Error
/page1.jsp:

javax.servlet.ServletException: Exception thrown processing JSP page.
javax.servlet.jsp.JspException: Exception thrown processing JSP page.
	java.lang.Throwable(java.lang.String)
	java.lang.Exception(java.lang.String)
	javax.servlet.jsp.JspException(java.lang.String)
	int org.apache.struts.taglib.template.InsertTag.doEndTag()
	void
jrun__index2ejspa._jspService(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
	void
allaire.jrun.jsp.HttpJSPServlet.service(javax.servlet.ServletRequest,
javax.servlet.ServletResponse)
	void allaire.jrun.servlet.JRunSE.service(javax.servlet.Servlet,
javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
	void
allaire.jrun.servlet.JRunSE.runServlet(allaire.jrun.servlet.JRunChain,
allaire.jrun.servlet.ForwardRequest, allaire.jrun.servlet.JRunResponse)
	void
allaire.jrun.servlet.JRunNamedDispatcher.forward(javax.servlet.ServletReques
t, javax.servlet.ServletResponse)
	void
allaire.jrun.jsp.JSPServlet.service(javax.servlet.ServletRequest,
javax.servlet.ServletResponse)
	void allaire.jrun.servlet.JRunSE.service(javax.servlet.Servlet,
javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
	void
allaire.jrun.servlet.JRunSE.runServlet(allaire.jrun.servlet.JRunChain,
allaire.jrun.servlet.ForwardRequest, allaire.jrun.servlet.JRunResponse)
	void
allaire.jrun.servlet.JRunRequestDispatcher.forward(javax.servlet.ServletRequ
est, javax.servlet.ServletResponse)
	void
allaire.jrun.servlet.JRunSE.service(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
	void
allaire.jrun.servlet.JvmContext.dispatch(javax.servlet.http.HttpServletReque
st, javax.servlet.http.HttpServletResponse)
	void allaire.jrun.http.WebEndpoint.run()
	void allaire.jrun.ThreadPool.run(java.lang.Runnable)
	void allaire.jrun.WorkerThread.run()

Thank you,
Gernot

Re: template-taglib; nestes templates?

Posted by Cedric Dumoulin <ce...@lifl.fr>.
  Check the Components proposal, you will certainly find what you need.

  Cedric

Components sites :
  http://www.lifl.fr/~dumoulin/components/
  (mirror) : http://www.geocities.com/cedricdumoulin/components/


Pfingstl Gernot wrote:

>
>
> Is it possible to use a template in a template?
> I tried following:
>
> I have a file "/templates/main.jsp", which is the main layout for all
> pages
> (header, content and footer area and a page title):
>
> <%-- main.jsp --%>
> <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template'
> %>
> <html>
> <head>
>         <title><template:get name='title'/></title>
>         <meta http-equiv="Content-Type" content="text/html;
> charset=iso-8859-1">
>         <link rel="stylesheet"
> href="<%=request.getContextPath()%>/css/main.css" type="text/css">
> </head>
> <body>
> <table>
> <tr valign='top'>       <tr><td><template:get
> name='header'/></td></tr>
>                         <tr><td><template:get
> name='content'/></td></tr>
>                         <tr><td><template:get
> name='footer'/></td></tr>
> </table>
> </body>
> </html>
>
> Second step: I don't want to say all the time what header and footer
> to use, so I wrote other templates (which are based on
> /templates/main.jsp) which grouped some header and footer scenarios
> together. As an example I have /templates/layout1.jsp:
>
> <%-- layout1.jsp --%
> <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template'
> %>
> <template:insert template='/templates/main.jsp'>
>         <template:put name='header' content='/header.jsp'/>
>         <template:put name='footer' content='/footer.jsp'/>
>         <template:put name='title'><template:get
> name='title1'/></template:put>
> </template:insert>
>
> Third step: I have a JSP page, which uses layout1.jsp:
>
> <%-- page1.jsp --%>
> <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template'
> %>
> index1a
> <template:insert template='/templates/layout1.jsp'>
>         <template:put name='title1' content='Templates/Layout1'
> direct='true'/>
>                                                         <%-- I use
> direct for testing only>
>         <template:put name='content' content="/dok1.jsp" direct='true'
> />
>                                                         <%-- I use
> direct for testing only>
> </template:insert>
>
> If I call page1.jsp in the browser I get an exception (see below).
> If I change the line "<template:put name='title'><template:get
> name='title1'/></template:put>"
> in layout1.jsp to "<template:put name='title'>some static
> text</template:put>" everything goes right!
> Can I use nested templates?
> If yes, how can I use them?
>
> The exception text:
>
> 500 Internal Server Error
> /page1.jsp:
>
> javax.servlet.ServletException: Exception thrown processing JSP page.
> javax.servlet.jsp.JspException: Exception thrown processing JSP page.
>         java.lang.Throwable(java.lang.String)
>         java.lang.Exception(java.lang.String)
>         javax.servlet.jsp.JspException(java.lang.String)
>         int org.apache.struts.taglib.template.InsertTag.doEndTag()
>         void
> jrun__index2ejspa._jspService(javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
>
>         void
> allaire.jrun.jsp.HttpJSPServlet.service(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse)
>         void
> allaire.jrun.servlet.JRunSE.service(javax.servlet.Servlet,
> javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
>
>         void
> allaire.jrun.servlet.JRunSE.runServlet(allaire.jrun.servlet.JRunChain,
> allaire.jrun.servlet.ForwardRequest,
> allaire.jrun.servlet.JRunResponse)
>
>         void
> allaire.jrun.servlet.JRunNamedDispatcher.forward(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse)
>
>         void
> allaire.jrun.jsp.JSPServlet.service(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse)
>         void
> allaire.jrun.servlet.JRunSE.service(javax.servlet.Servlet,
> javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
>
>         void
> allaire.jrun.servlet.JRunSE.runServlet(allaire.jrun.servlet.JRunChain,
> allaire.jrun.servlet.ForwardRequest,
> allaire.jrun.servlet.JRunResponse)
>
>         void
> allaire.jrun.servlet.JRunRequestDispatcher.forward(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse)
>
>         void
> allaire.jrun.servlet.JRunSE.service(javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
>
>         void
> allaire.jrun.servlet.JvmContext.dispatch(javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
>
>         void allaire.jrun.http.WebEndpoint.run()
>         void allaire.jrun.ThreadPool.run(java.lang.Runnable)
>         void allaire.jrun.WorkerThread.run()
>
> Thank you,
> Gernot