2012-06-28 2 views
0

Я обновил свой liferay до 6.0 и JSF с 1.2 до 2.1. Мой существующего кодJSF 2.1 Перенаправление в портлет

((ActionResponse)context.getExternalContext().getResponse()).sendRedirect(redirect); 
context.responseComplete(); 

Здесь перенаправлять определяются следующим образом:

String redirect = "/namingportal/group/customercenter/accountSearch"; 

выше URL страница портлета, к которому должен быть перенаправлен запрос.

Started порывая с ошибкой: java.lang.IllegalStateException: Установите параметр визуализации уже называется на com.liferay.portlet.ActionResponseImpl.sendRedirect (ActionResponseImpl.java:48)

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

Решение 1:

context.getExternalContext().redirect(redirect); 

Когда я попытался с раствором 1, его дает мне лицо об ошибке sFileNotFound /namingportal/group/customercenter/accountSearch.xhtml, он фактически ищет xhtml, а не портлет.

У меня есть это в моей web.xml:

<context-param> 
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
     <param-value>.xhtml</param-value> 
    </context-param> 

Пожалуйста, дайте мне знать, если есть какие-либо другие альтернативные пути для перенаправления портлета из JSF управляемого метод компонента с использованием Liferay 6.0 и JSF 2.1.

Благодаря

+0

Каков URL этой страницы при открытии ее непосредственно веб-браузером? То есть что вы видите в адресной строке браузера, если эта страница якобы правильно запрошена? – BalusC

+0

Вот правильный URL-адрес управляемого управляемого компонента: https: // : /namingportal/group/customercenter/accountSearch. Когда я набираю этот URL прямо в браузере, портлет получает визуализацию правильно. – Sri

+0

Ах ладно. Это будет специфичным для портлета .. – BalusC

ответ

3

моста придерживается требований JSR 329 Spec для ExternalContext.redirect (String), которая обеспечивает стандартный способ добиться того, что вы хотите сделать.

В большинстве случаев внешний мост Context.redirect (String) принимается мостом как часть запуска JSF-навигации. Тем не менее, есть два способа, чтобы сделать его работу в вашем случае:

1) Добавить параметр Bridge.DIRECT_LINK к URL со значением «истина»:

String redirect = "/namingportal/group/customercenter/accountSearch?javax.portlet.faces.DirectLink=true"; 
externalContext.redirect(redirect); 

2) Сделать URL в быть абсолютным, например:

PortletRequest portletRequest = externalContext.getRequest(); 
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute("THEME_DISPLAY"); 
String portalURL = themeDisplay.getPortalURL(); 
String redirect = portalURL + "/namingportal/group/customercenter/accountSearch"; 
externalContext.redirect(redirect); 
Смежные вопросы