Liferay 7.3, как получить значения параметров внутри портлета и получить доступ к ним. jsp - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь получить параметры внутри портлета в Liferay 7.3. Если я передаю параметр вроде:

http://localhost:8080/web/guest?name=abhi

на веб-странице, которая содержит мой портлет. Так что мой вопрос

Q1) могу ли я получить этот параметр внутри контроллера портлета (метод doView), когда пользователь перезагрузит вышеуказанную страницу, выполнив что-то вроде:

import com.liferay.portal.kernel.util.ParamUtil;

public class MySamplePortlet extends MVCPortlet {

 @Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {

   String name = ParamUtil.getString(renderRequest, "name");
   System.out.println(name);

 }
}

Здесь я получаю пробел для имени при печати. ​​

И

Q2) как проверить состояние этого параметра в представлении view.jsp файл (как получить значение переменной класса внутри файла представления)?

<% if(name) %>
  render form view
<% else %>
  render messageBox view

......

Я хочу отображать различные представления в соответствии со значением параметра.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Параметры для портлета обычно имеют пространство имен - например, HTTP-параметр name может быть любым для любого портлета - и на странице потенциально может быть много портлетов. Все они могут думать о name как о чем-то другом: город, пользователь, клиент, используемый в настоящее время компьютер, домашнее животное ...

Таким образом, любая форма обычно представляет значения, которые выглядят как (в jsp -lin go): <input name="<portlet:namespace/>name" ..../> вместо <input name="name" ..../>

Если вы используете теги с поддержкой портлетов, они могут выполнять оформление автоматически, например, <aui:input name="name" .../>.

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

Однако вы можете деактивировать пространство имен для каждого портлета. Или вы можете вручную получить доступ к базовому HTTPServletRequest. Оба сильно обескуражены. Вот как вы стреляете себе в ногу, если хотите:

  • Установить свойство портлета com.liferay.portlet.requires-namespaced-parameters=false
  • Использовать PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)) (что делают эти функции - и зачем они вам нужны оба - это описано, например, здесь )
0 голосов
/ 17 апреля 2020

Таким образом, ParamUtil будет работать, если параметр предназначен для портлета. в этом случае кажется, что вы хотите, чтобы параметр в URL вообще не указывал c для портлета. Для этого вам нужно использовать PortalUtil

HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(req));
String name = httpReq.getParameter("name");

Обратите внимание, что я искал оригинальный запрос. не запрос портлета.

надеюсь, это поможет

...