Below you have 10 reasons to use OmniFaces 2.0 in your JSF projects
1. Your application is ready and works like a charm, but ViewExpiredException spoil all the satisfaction ? Well, any JSF developer saw this exception and everybody wants to solve it in a fast and elegant approach. OmniFaces fix this problem via a custom tag handler that instructs the view handler to recreate the entire view whenever the view has been expired. So, check how easy is to get rid of this exception using OmniFaces <o:enableRestorableView>.
1. Your application is ready and works like a charm, but ViewExpiredException spoil all the satisfaction ? Well, any JSF developer saw this exception and everybody wants to solve it in a fast and elegant approach. OmniFaces fix this problem via a custom tag handler that instructs the view handler to recreate the entire view whenever the view has been expired. So, check how easy is to get rid of this exception using OmniFaces <o:enableRestorableView>.
2. Most probably, you are
loading external resources (e.g. CSS, JS, images) in a classic JSF style by
pointing the /resources folder libraries. But, you want to use <h:outputScript>
and <h:outputStylesheet>
to load external resources from CDNs (e.g. Google Hosted Libraries), which, by
default, is not possible in JSF ? OmniFaces comes with the solution via a custom
resource handler, named CDNResourceHandler. This will simply allows
you to load resources from CDNs via <h:outputScript> and <h:outputStylesheet>.
Moreover, check out CombinedResourceHandler and UnmappedResourceHandler, to
discover more useful stuff.
3. You need to render images
that comes as InputStream
or byte[]
? You want to render them as data URI ? Obviously, the <h:graphicImage> cannot help you to find the answer to these
questions. But, OmniFaces provides the <o:graphicImage>, which is an
extension of the <h:graphicImage> dedicated to render JSF resource as data URI, InputStream/byte[]
property as resource, InputStream/byte[] property as data URI, etc. Just
check the OmniFaces ShowCase.
4. JSF custom converters is a
well-known topic to JSF developers. We need to write them in many kind of
situations, and sometimes they are time consuming, they are called at every
request regardless of whether the submitted value has changed or not, or they need
to do the job based on possibly expensive service/DAO operations, etc. Just if
you read the names of converters provides out of the box by OmniFaces, you will
take into account to check them at your first need to write a custom converter:
GenericEnumConverter,
ListConverter,
ListIndexConverter,
SelectItemsConverter,
SelectItemsIndexConverter,
ValueChangeConverter.
5. Is time to validate your
form, so you start writing your custom validators and attach them to
components. Suddenly, you realize that your components validation is
interdependent, which requires special custom validators. Well, what exactly
are you looking for? to validate if ONLY ONE of the given UIInput
components have been filled out ? validate if ALL of the given UIInput
components have been filled out ? validate if ALL of the given UIInput
components have the same value ? validate if ONLY ONE of the given UIInput
components has been filled out or that NONE of the given UIInput
components have been filled out ? etc. If you answered yes, or you think of
some other case, then OmniFaces has a set of 14 special custom validators.
6. When you checked your page
source code, you've noticed quite a lot of markup ? Most of this markup is
loaded (rendered) at each postback even if you don't change it (e.g. large
tables with fix data). Well, the Render Response phase is the most time
consuming JSF phase, especially in cases when the rendered markup is
consistent. You can speed up this process with a snap of a finger via the
OmniFaces Cache
component. Caching markup will boost the Render Response phase (check some tests
here). The examples provided by OmniFaces Showcase are very clear and well
explained.
7. I know a trendy topic: deferred scripts. I'm pretty sure that you heard about placing the scripts at the end of
</body>,
use defer="true"
or async="true",
but I'm not so sure that you know that these approaches are not really working
as expected. The OmniFaces, <o:deferredScript> defers the loading
of the given script resource to the window load event (the given script
resource is only loaded when the window is really
finished with loading).
8. By default, most of AJAX
exceptions are invisible to the client. They are returned to the client, but unfortunately
JSF AJAX clients aren't prepared to deal with arbitrary error messages, so they
simply ignore them. But a custom exception handler is specially created for
this task by OmniFaces (it works for AJAX and non-AJAX exceptions). The handler
is named FullAjaxExceptionHandler,
and the factory is named FullAjaxExceptionHandlerFactory. This will
give to your AJAX based applications a real boost, because your end users would know if their actions was successfully performed or not.
9. Beside validation messages,
you simply want to highlight the invalid inputs of a form via some CSS ? The OmniFaces<o:highlight>
is a helper component which highlights all invalid UIInput components and the
associated labels by adding an error style class to them. Additionally, it by
default focuses the first invalid UIInput component. Check the OmniFaces ShowCase to see how easy is to use it.
10. Working with <h:message>
and <h:messages>
has several important limitations. OmniFaces, comes with <o:messages>,
which allows us to specify multiple client IDs space separated in the for
attribute, show a single custom message whenever the component has received any
faces message, HTML escaping and messages iteration markup control.
P.S. Obviously, if you read so far, and you
accessed the OmniFaces ShowCase at least once, then you noticed that there are
many other interesting components, handlers, listeners, functions, utils etc.
There is plenty material to make "1000 Reasons to Use OmniFaces 2.0", but, now that you know what OmniFaces can do for your JSF applications, I'm sure that
you will dig further and OmniFaces will make your life easier. Do not omit to check the OmniFaces source code, which provides valuable lessons to any JSF developer. There you will find answer
to many questions, and a great source of inspiration for your projects.
If
you have specific programming problems or questions related to the OmniFaces library, feel free to post a question on Stack Overflow using at least the jsf and omnifaces tags.
Niciun comentariu :
Trimiteți un comentariu