Передача параметра URL с помощью команды Button на портале jsf с использованием Jsr 168
Я не могу получить параметр от URl, когда я вызываю другой портлет с помощью Command Button в Jsf в JSR 168. На самом деле я вызываю метод моего manageBean из Command Button, где я генерирую URL, и вызываю другой портлет. Но я не могу получить этот параметр в другом управляющем компоненте вызываемого портлета.
Может кто-нибудь, пожалуйста, скажите мне, где я иду не так.
1 ответ
Чтобы получить параметры URL портлета JSR 168; у вас есть один из трех вариантов (насколько я знаю):
Создав фильтр на уровне Websphere Application Server и сконфигурировав Dynamic Cache для хранения строки запроса, вы сможете получить любой параметр, присоединенный к любой сгенерированной ссылке портлета, даже без использования сопоставления URL-адресов с учетом размера динамического кэша.
Вы должны захватить параметр на ранней стадии жизненного цикла портлета, который называется "doView", и, приведя RenderRequest к HttpServletRequest, вы сможете получить их из метода getQueryString() (вы не сможете получить их из метода getParameter RenderRequest, хотя в спецификации упоминается, что), и после этого вы можете отправить на любую страницу в вашем приложении.
Третий способ: если вы попытаетесь сгенерировать ссылку на портлет с помощью тегов URL Generation, вам будет разрешено добавить параметр к этой ссылке и записать его в doView так же, как показано ниже:
<wps:urlGeneration contentNode="MyApp.app" portletWindowState="Maximized" newWindow="True">
<wps:urlParam name="MyParam" value="Hi There"/>
<a href="<% wpsURL.write(out); %>" target="_blank" >My Link</a>
</wps:urlGeneration>
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
System.out.println("The parameter is: "+httpServletRequest.getQueryString());
super.doView(request, response);
}
Примечание. Полный код жизненного цикла вашего портлета по умолчанию будет находиться в пакете com.ibm.{your project name}
и RSA спросит вас, хотите ли вы, чтобы он был доступен или нет в начале создания проекта, и если вы не сделали его доступным, вы все равно можете создать его, переопределив свой <portlet-class>
вашего портлета в portlet.xml
,