使用Richfaces 4.2和PortletBridge 3.1的Liferay portlet问题

时间:2013-05-08 13:22:57

标签: ajax richfaces liferay portlet portletbridge

我们有一个应用程序,包含许多用于Liferay 6.0.6的Portlet,使用JSF1.2和RichFaces 3.3.3.Final和PortletBridge 2.1.1,一切正常。我们决定使用RichFaces 4.2.3.Final和PortletBridge 3.1.2将我们的东西升级到JSF2。在我们尝试使用一些启用了ajax的命令按钮(a4j:commandButton或h:commandButton with f:ajax)进行导航之前,一切似乎都很好:在这种情况下,portlet执行导航,但整个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改为Liferay自己的Faces Bridge,它似乎运行良好。上面的所有例外情况都已消失,导航工作正常。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Liferay 6.0.6,那么您需要使用Liferay Faces 3.0.x,而不是3.1.x.有关详细信息,请参阅Liferay Faces Version Scheme wiki文章。