почему jsp: включить параметры не видно - PullRequest
5 голосов
/ 25 апреля 2011

У меня точно такой же основной вопрос о доступе к jsp: param values ​​, как у этого постера;следование его примеру точно не работает для меня.Параметры, передаваемые через jsp: include , не отображаются во включаемом файле.В моей настройке есть что-то особенное?

Звонящий:

<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/>

Окончательный вывод:

method 1: [null]

method 2: []

method 3: [] 

Обновление : следующий обходной путь работает работает, он кажется неправильным, но, возможно, тот факт, что он работает, обнаруживает что-то, что не работает.

<c:set var="justinVar" value="justinVARisHere" scope="request" />
<jsp:include page="../../../common/callee.jsp" />

Ответы [ 5 ]

3 голосов
/ 27 апреля 2011

Чтобы решить проблему, попробуйте отладить / изучить всю карту, напечатав ${param} в EL или HttpServletRequest#getParameterMap() в коде Java. Он должен дать представление о том, что карта действительно содержит.

1 голос
/ 15 мая 2011

правый.У меня была похожая проблема, что в течение последнего часа или около того, и я нашел решение для моего случая.

У меня был index.jsp и я попытался включить в него файл news.jspf с текстом из параметра jsp вindex.jsp Это не сработало.Он просто показал news.jspf EL как обычный текст.

Я изменил расширение имени включенного файла с .jspf на .jsp, и это устранило проблему.

Я использую Eclipse, которыйможет или не может быть фактором.

Удачи

0 голосов
/ 24 апреля 2018

Эта проблема может возникнуть, если запрос обернут (например, HttpServletRequestWrapper), вероятно, через фильтр.См .: jsp: param больше не устанавливает параметры, когда исходный запрос заключен в HttpServletRequestWrapper

0 голосов
/ 07 марта 2014

Эта работа в моем портлете Liferay

ParamUtil.getString(PortalUtil.getOriginalServletRequest(request), "justinVar")
0 голосов
/ 26 апреля 2011

Я проследил сгенерированный источник Java, и это выглядит разумно.Происходит либо одно из двух: org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode путает имя переменной, либо используемый загрузчик классов преобразуется в JspRuntimeLibrary в другой экземпляр, чем тот, который управляет веб-приложением.

// 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
);

Заглянув внутрь среды выполнения Джаспера, мы находим этот драгоценный камень.Непонятно, в чем проблема, однако отображаемая страница имеет вид jsp: include из defaultParent.jsp, хотя jsp: параметры, передаваемые в jsp: include из defaultParent, также не отображаются.

  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
...