Recently, I have got this error with JSP. It seems to me quite strange !
When I wrote:

<% String includePage = “/simulation/salaries/” + ref.getIncludeListeSalaries(); %>
<jsp:include page=”<%= includePage %>”>
….
</jsp:include>

it works (with Resin 2.0.5)
But when I wrote:

<jsp:include page=”/simulation/salaries/<%= ref.getIncludeListeSalaries() %>”>
….
</jsp:include>

it does NOT work, and the error message is:

[21/08/07 15:16:46.814] [2007/08/21 14:16:46] D:\SVN_LOCAL\V1.64\sf\simulation\salaries\creerListeSalariesSaisieManuelleArt83.jsp:415: interpolated runtime values are forbidden by the JSP spec at `/simulation/salaries/<%= ref.getIncludeListeSalaries() %>’
[21/08/07 15:16:46.814] com.caucho.jsp.JspParseException: D:\SVN_LOCAL\V1.64\sf\simulation\salaries\creerListeSalariesSaisieManuelleArt83.jsp:415: interpolated runtime values are forbidden by the JSP spec at `/simulation/salaries/<%= ref.getIncludeListeSalaries() %>’
at com.caucho.jsp.JspGenerator.error(JspGenerator.java:1331)
at com.caucho.jsp.JspGenerator.hasRuntimeAttribute(JspGenerator.java:1173)
at com.caucho.jsp.JavaGenerator.generateInclude(JavaGenerator.java:601)
at com.caucho.jsp.JspGenerator.generateChildren(JspGenerator.java:720)
at com.caucho.jsp.JspGenerator.generate(JspGenerator.java:266)
at com.caucho.jsp.JspParser.parse(JspParser.java:236)
at com.caucho.jsp.JspParser.parse(JspParser.java:142)
at com.caucho.jsp.JspManager.createPage(JspManager.java:155)
at com.caucho.jsp.PageManager.getPage(PageManager.java:340)
at com.caucho.jsp.PageManager.getPage(PageManager.java:195)
at com.caucho.jsp.QServlet.getPage(QServlet.java:220)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:128)
at com.caucho.server.http.Invocation.service(Invocation.java:288)
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:214)
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:99)
at com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:76)
at fr.acmn.simu.ControleArt83.controleListeSalariesNomSaisieManuelle(ControleArt83.java:1836)
at fr.acmn.simu.ControleArt83.service(ControleArt83.java:160)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:82)
at com.caucho.server.http.Invocation.service(Invocation.java:288)
at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:340)
at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:270)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Unknown Source)
[21/08/07 15:16:46.814] invocation:/general/page500.jsp -> (host:, context:, servletPath:/general/page500.jsp, pathInfo:null, servlet:com.caucho.jsp.JspServlet, filter:null)

I don’t know why but this problem is quite popular
(see:
Possible bug with interpolated runtime values are forbidden
interpolated runtime values are forbidden?)

Here is the extrait from the book “Professional Java Server Programming”, Chapter 12: JSP Tag Extensions

There is a curious and confusing inconsistency in JSP syntax when non-String tag attributes are the results of JSP expressions. Let’s suppose we want to pass an object of class examples.Values (a kind of list) to a tag extension. The syntax:

<wrox:list values=”<%=values%>”

is problematic, because we know from the JSP specification that an expression “is evaluated and the result is coerced to a String which is subsequently emitted into the current out JspWriter object”. In the case of the custom tag above, however, the value of the expression is not coerced to a String, but passed to the tag handler as its original type.