Showing posts with label MyFaces. Show all posts
Showing posts with label MyFaces. Show all posts

Friday, August 30, 2013

JSF 2.x Tip of the Day: FacesMessage Severity Differences Between Mojarra and MyFaces

Introduction

We encountered an inconsistency between MyFaces and Mojarra that I was surprised was not addressed a long time ago. The issue has to do with the ordinal values assigned to the FacesMessage.Severity. Mojarra uses a zero(0) based level of Severity and MyFaces uses a one(1) based Severity level. As a result, we were trying to use a <rich:notifyMessages/> component with, as you can expect, some unexpected results.

One of the items I always preach is to code to the API. If you code to the API, then you can switch out the implementations should the need occur. This is a best practice, but can be undermined by little subtleties like this. Please don't get me wrong, both Mojarra and MyFaces are great implementations. It is these fine differences that should be consistent that we need to work on to make sure that we are consistent, and that the dream is real; switching implementations will not be painful.

RichFaces is a good framework, and folks like Brian Leathem take personal pride in making it a good implementation to run on top of either Mojarra, or MyFaces. I was really surprised by my discovery of an issue with <rich:notifyMessages/> since the <rich:messages/> works correctly. The problem is focused on the ordinal value I mentioned. I opened a JIRA issue with both MyFaces and RichFaces around the ordinal issue. Please see the references below for details.

However, I needed a solution not just report an issue. So I came up with a 10¢ solution based on some work I did at home last night, and a great suggestion by one of my team. I wanted to publish an article, a complaint, and a solution that others may need. These work arounds tend to become more common when doing cross-platform development, and sharing is paramount.

Problem

The RichFaces <rich:notifyMessages/> does not work consistently across JSF implementations based on Severity ordinal values.

Solution

Implement a method that checks the FacesMessage.Severity ordinal values, and change icons and CSS to correct the differences between implementations. We can accomplish this using CSS, and Expression Language (EL) combined with a page backing bean. In this case, I use a simple page backing bean, but it could be converted to a custom EL function.

The code for this example can be found here: myfaces-rf-example

default.css



iconURL()


This simple solution allows us to check to see if the implementation starts at 0, or 1 and changes the icons and CSS.

References

Monday, June 10, 2013

RichFaces 4.x Drag and Drop (DnD) Issue with MyFaces and WebSphere 8.5

I have been fighting with MyFaces for a couple of weeks now to get it to run on multiple containers that have Weld as the CDI implementation, and also to run on WebSphere with OpenWebbeans (CDI) implementation. Just when we thought we had the problem solved... RichFaces is killing us with a Drag and Drop (DnD) issue on MyFaces.

The issue is detailed in RF-12675 Drag and drop doesn't work with MyFaces. It is an ugly bug that prevents the application from dropping the draggable on the drop target. It is supposed to be fixed according to JIRA in version 5 which as far as I know has an undetermined launch date at this time.

I think that the issue probably warrants investigation by the RichFaces team, but I am posting this just in case folks have encountered the same issue.

I have a test application that is from on the RichFaces Showcase application that demonstrates the Drag and Drop functionality. I tested it on GlassFish, JBoss 7, and Weblogic 12c. It works perfectly on those platforms but the drag freezes in "mid-air" on WebSphere 8.5 with MyFaces.

Here is a link to the application, or you can get it from the JIRA issue above: dragdrop-test.zip.

I hope the RichFaces team reconsiders the bug since it affects 4.2.3 and 4.3.2 final releases.

UPDATE: One of the Senior Engineer's on my team, Amit Tikoo, confirmed the issue is focused on the <rich:dragIndictor />. The work around is to remove the indicator and the application will function. The JIRA issue was updated with the observations.

Popular Posts