I have exactly the same basic question about accessing jsp:param values as this poster; following his example exactly does not work for me. The parameters passed in via jsp:include don't seem to show up in the included file. Is there something peculiar about my setup?
Caller:
<div>
<jsp:include page="../../../common/callee.jsp">
<jsp:param name="justinVar" value="primary" />
</jsp:include>
</div>
callee.jsp:
<i>method 1: [</i><b><%= request.getParameter("justinVar") %></b><i>]</i>
<p/>
<i>method 2: [</i><b>${param.justinVar}</b><i>]</i>
<p/>
<i>method 3: [</i><b>${justinVar}</b><i>]</i>
<p/>
Final output:
method 1: [null]
method 2: []
method 3: []
Update: The following workaround does work, it seems wrong, but perhaps the fact that it works reveals something that is not working.
<c:set var="justinVar" value="justinVARisHere" scope="request" />
<jsp:include page="../../../common/callee.jsp" />
To nail down the problem, try to debug/explore the entire map by printing ${param}
in EL or HttpServletRequest#getParameterMap()
in Java code. It must give insights about what the map really contains.
Right. I have had a similar problem that for the last hour or so and I have found a solution for my case.
I had index.jsp and tried to include news.jspf in it with text from a jsp param in the index.jsp It didn't work. It just showed the news.jspf EL as normal text.
I changed the included file name extension from .jspf to .jsp and it fixed the problem.
I'm using Eclipse, which may or may not be a factor.
Good luck
I've traced down the generated java source and it looks reasonable. Either one of two things are happening: org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode is messing up the varible name, or the classloader used resolves to JspRuntimeLibrary to some other instance than the one driving the web app.
// caller.jsp ....
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,
"callee.jsp" + (("callee.jsp").indexOf('?')>0? '&': '?') +
org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("justinVar",
request.getCharacterEncoding())+ "=" +
org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("primary",
request.getCharacterEncoding()), out, true
);
Looking inside Jasper's runtime, we find this gem. Its not clear that this is the problem, however the page being rendered is jsp:include from defaultParent.jsp, although jsp:params passed into the jsp:include from defaultParent don't seem to show up either.
958 // FIXME - It is tempting to use request.getRequestDispatcher() to
959 // resolve a relative path directly, but Catalina currently does not
960 // take into account whether the caller is inside a RequestDispatcher
961 // include or not. Whether Catalina *should* take that into account
962 // is a spec issue currently under review. In the mean time,
963 // replicate Jasper's previous behavior
This work in my Liferay portlet
ParamUtil.getString(PortalUtil.getOriginalServletRequest(request), "justinVar")
This issue can happen if the request is wrapped (i.e. HttpServletRequestWrapper), likely via a filter. See: jsp:param no longer sets parameters when original request is wrapped with a HttpServletRequestWrapper
来源:https://stackoverflow.com/questions/5780314/why-jspinclude-parameters-not-visible