Портлет Liferay: дружественный к liferay настраиваемый параметр URL

Кто-нибудь может мне помочь? У меня есть настраиваемый параметр, например, «statusparam». И я хочу сделать что-то вроде этого:

actionResponse.sendRedirect(redirect + "&statusparam=error");

Но проблема в том, что пользовательский параметр не является дружественным для liferay, и liferay не видит его в моем методе рендеринга:

String status = ParamUtil.getString(renderRequest, "statusparam");

Как я могу сгенерировать удобный для Liferay URL-адрес с моими пользовательскими параметрами? Или как их взять?


person jahra    schedule 15.09.2015    source источник
comment
Проблема в том, что ваш параметр должен находиться в правильном пространстве имен портлета. Как создать переменную redirect? Если вы используете PortletURL (например, через PortletURLUtil), вы можете использовать setParameter(String name, String value) метод.   -  person Jozef Chocholacek    schedule 15.09.2015
comment
@jahra, ты нашел подходящее решение?   -  person Parkash Kumar    schedule 17.09.2015


Ответы (2)


Шаблон 1: setRenderParameter
Один из способов — установить параметры рендеринга на этапе действия с помощью setRenderParameter следующим образом:

actionResponse.setRenderParameter("statusparam", "error");

а затем используйте:

String status = renderRequest.getParameter("statusparam");

or

String status = ParamUtil.getString(renderRequest, "statusparam");

Шаблон 2: глобальное свойство
Другой способ — поместить глобальное свойство в класс действия, присвоить ему значение в методе действия, после чего оно будет доступно и в методе рендеринга.

public class MyPortletAction extends GenericPortlet {
    String statusparam = "";

    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) {

        if(statusparam != ""){
            // Perform operation as per your requirement
        }
    }

    public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) {

        // Set statusparam here:
        statusparam = "error";
    }
}

Шаблон 3: queryString
Хотя, если вы хотите передать его как параметр queryString, вы можете извлечь его из объекта HttpServletRequest на этапе рендеринга следующим образом:

HttpServletRequest request = PortalUtil.getHttpServletRequest(renderRequest);
String statusparam = request.getParameter("statusparam");
person Parkash Kumar    schedule 16.09.2015

Есть два способа получить значения параметров без префикса пространства имен.

  1. #P2# <блочная цитата> #P3#

и вы можете читать так:

String status = ParamUtil.getString(renderRequest, "statusparam");
  1. Или используйте HttpServletRequest, например:
HttpServletRequest request = PortalUtil.getHttpServletRequest(renderRequest);
String statusparam = request.getParameter("statusparam");

Изменить: если вам нужен этот параметр только в методе рендеринга того же портлета, используйте setRenderParameter, например:

actionResponse.setRenderParameter("statusparam", "error");

Помните, что он не будет добавлен в URL, а также не будет доступен в других портлетах.

person yadavjpr    schedule 16.09.2015
comment
Не используйте шаблон 2: глобальное свойство, как объяснил @parkash-kumar в своем ответе. У каждого запроса нет отдельного объекта портлета. - person yadavjpr; 16.09.2015
comment
Вопрос не в том, как лучше всего получить параметры запроса. - person Parkash Kumar; 16.09.2015
comment
Что, если между действием и фазой рендеринга первого запроса появится другой пользовательский запрос? Это переопределит первое значение. Это? Никто не создает портальное приложение для одного пользователя - person yadavjpr; 16.09.2015
comment
Очередная просьба чего? рендеррекуест / actionRequest??? Если другой запрос относится к рендерингу, свойство для него будет пустым. В то время как если другой запрос для действия, то значение будет установлено при определенном условии. Я не вижу там перегруженного имущества. - person Parkash Kumar; 16.09.2015
comment
Какой у вас опыт работы в Liferay? Вы знаете шаблон singleton? Если объект одноэлементный, как он будет пустым в следующем запросе? - person yadavjpr; 17.09.2015
comment
Я совсем новичок в Liferay. Я никогда не изучал шаблоны проектирования. Спасибо за Вашу информацию. - person Parkash Kumar; 18.09.2015