Проблема с портлетами Liferay в Richfaces 4.2 и PortletBridge 3.1
У нас есть приложение с многочисленными портлетами для Liferay 6.0.6, использующее JSF1.2 с RichFaces 3.3.3.Final и PortletBridge 2.1.1, и все работало нормально. Мы решили обновить наш материал до JSF2 с помощью RichFaces 4.2.3.Final и PortletBridge 3.1.2. Казалось, что все в порядке, пока мы не попытались использовать некоторые кнопки с поддержкой ajax (a4j:commandButton или h:commandButton с f:ajax) для навигации: в этом случае портлет выполняет навигацию, но весь экран Liferay исчезает и только JSF компоненты остаются на экране. Если мы попытаемся использовать какую-то навигацию снова, она скоро потерпит неудачу (после 1-3 попыток) с этим исключением:
[#|2013-05-08T14:15:33.104+0200|SEVERE|glassfish3.0.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=26;_ThreadName=Thread-1;|Unblocking keep-alive exception
java.lang.IllegalArgumentException: Request header is too large
Он также записывает некоторые интересные вещи, как это:
[#|2013-05-08T14:11:42.203+0200|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=26;_ThreadName=Thread-1;|Unable to find component with clientId 'pb_richtest_WAR_richtest_INSTANCE_HlC1__j_id1:j_id2', no need to remove it.|#]
ОБНОВЛЕНИЕ: После некоторого копания мы поняли, что использование ajax для навигации довольно плохая практика (даже если это работало с JSF1.2 и RichFaces 3.3), поэтому изменили наши шаблоны, чтобы избежать этого везде. А также изменился с JBoss PorletBridge на собственный Faces Bridge от Liferay, и, похоже, он работает нормально. Все вышеперечисленные исключения исчезли, и навигация работает как надо.
1 ответ
Если вы используете Liferay 6.0.6, вам нужно использовать Liferay Faces 3.0.x, а не 3.1.x. Для получения дополнительной информации см. Вики-статью Liferay Faces Version Scheme.