I'm having some trouble with this, and google wasn't really helpful on this particular subject.
I have the following that I want to execute:
<c:forEach var="block" items="${blocks}">
<jsp:include page="${block.blockJSP}"/
</c:forEach>
The idea behind it is that I have a set of "blocks". This allows me to create a page in a modular fashion. This works just fine, and I'm happy with the way it works.
Now I want to customize the content of the blocks by passing a few key/value pairs to it while the page is being created:
<c:forEach var="block" items="${blocks}">
<jsp:include page="${block.blockJSP}">
<c:forEach var="blockParam" items="${block.blockParameters}">
<jsp:param name="${blockParam.key}" value="${blockParam.value}"/>
</c:forEach>
</jsp:include>
</c:forEach>
This however gives me a nasty JasperException:
org.apache.jasper.JasperException: /jsp/survey.jsp (line: 113, column: 24) Expecting "jsp:param" standard action with "name" and "value" attributes
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:89)
at org.apache.jasper.compiler.Parser.parseParam(Parser.java:809)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1655)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:986)
at org.apache.jasper.compiler.Parser.parseInclude(Parser.java:838)
at org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1100)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1434)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1647)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:986)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1258)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1435)
at org.apache.jasper.compiler.Parser.parse(Parser.java:138)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:374)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
at com.narran.survey.SurveyServlet.showSurvey(SurveyServlet.java:45)
at com.narran.survey.SurveyServlet.doGet(SurveyServlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Perhaps my limited understanding of jstl is preventing me from fixing this issue. Am I even setting up this correctly?