While most MyFaces apps work seamlessly as a servlet or a portlet, changing a MyFaces appliction into a portlet can sometimes raise issues. There are several circumstances which make it necessary to change sources to get it run. There is also the JIRA entry MYFACES-434 which addresses some of the issues. Shinsuke SUGAYA has done there already a lot work and provides at https://sourceforge.jp/projects/pal/ a MyFaces-bridge (in Japanese).

Any help is welcome to improve the portal support of MyFaces!

Problems

There are some issues, which cause the problems of using MyFaces together with portals.

  • Open Issues in JIRA
  • External_Resources:
    MyFaces uses also external resources like CSS and JavaScripts files. Some of these files are added by the framework only once to the head part of the generated HTML output. Running as portlet, there is no access to this head as the portlet do not know about its container. For this, special External_Resources implementations are required for specific portal servers.
  • Generated IDs:
    MyFaces uses internal also IDs to identify the controls, but some portal servers rename these IDs (prefixes them for example) which could cause problems with generated JavaScript code. Actually, namespace prefixes are part of the JSF spec and should work okay, presuming that the component is written well
  • Caching:
    Portal servers provide often caching of the portlets. This could work different than the expected caching provided by a commen web contaienr like Tomcat. One solution could be to disable portlet caching, see http://jroller.com/page/stritti?entry=myfaces_portlets_within_liferay
  • FileUpload component:
    The file upload requires specific form parameters and do not work with no modifications within portlets. See also: MYFACES-434] and [http://issues.apache.org/jira/browse/MYFACES-434
  • Duplicate IDs:
    The Tomahawk Datatable doesn't work with two datascrollers. ERROR [portal-web.docroot.html.portal.render_portlet.jsp] java.lang.IllegalStateException: Duplicate component ID found in view. (Liferay 4.0)

  • Portlet Bug in MyFaces 1.1.4
    There is a bug in 1.1.4 that can cause a NullPointerException. See PortletSerialFactoryWorkaround.

Duplicate IDs are often thrown also during development when some of the jsf-pages are not recompiled completly. Then try to remove all compiled jsp files and it should work again. See also the bullet on Caching

Howtos

Portal Servers

How to get run MyFaces within portlets on different portal servers (in progress).

  • No labels