OmniFaces is an open source utility library for the JavaServer Faces 2 framework. It was developed using the JSF API, and its aim is to make JSF life easier by providing a set of artifacts meant to improve the functionality of the JSF framework. Omnifaces was created in response to seeing the same questions and the same example and utility code posted over and over again.[1] It simply comes as an answer to day-by-day problems encountered during working with JSF (e.g. bug fixing, pitfalls, missing features, missing utilities, common questions, etc.). Many of these problems were collected from StackOverflow.[2] 
OmniFaces was developed by two members of the JSF Expert Group (JSF EG), Bauke Scholtz (aka BalusC)[3] and Arjan Tijms.[4] 
OmniFaces can be used in both JSF implementations, Mojarra and Apache MyFaces, and is intended to work in cooperation with existing JSF libraries,[2] like PrimeFaces, OpenFaces, ICEfaces, MyFaces Trinidad, etc. 
  History
 The OmniFaces project started on 1 March 2012.  The latest release is OmniFaces 3.0 (released on 3 January 2018). 
 Release history
    | Release | Release  Date | Highlights | 
  | OmniFaces 1.0 | June 1, 2012 | highlighting fields that failed validationautomatically setting label of associated input componentinclude Servlets and JSP pages in FaceletsAjax aware exception handlerextensionless URLspassing a method expression into Facelets tag, multi-field validators
 | 
  | OmniFaces 1.1 | July 10, 2012 | form with support to include view parameters in action URLHTML5 render kitnew Messages buildernew validator which validates if ALL of the given inputs have been filled out
 | 
  | OmniFaces 1.2 | October 20, 2012 | support for programmatically executing callback scripts in Ajax responsefix for dealing with ViewExpiredExceptionbuffers the Ajax response fully until buffer size
 | 
  | OmniFaces 1.3 | December 20, 2012 | new Ajax#updateRow() and Ajax#updateColumn()new <o:enableRestorableView>new <o:validateBean>new SelectItemsIndexConverternew <o:commandScript>
 | 
  | OmniFaces 1.4 | March 11, 2013 | new for attribute in <o:validator> so that it can target inputs in compositesUnmappedResourceHandler which removes the JSF prefix/suffix mapping from resource paths<o:importFunctions> taghandler to import public static non-void methods of a given type as EL functions<o:param> which extends <f:param> with support for a Converter
 | 
  | OmniFaces 1.5 | June 10, 2013 | added new includeRequestParams attribute to <o:form><o:messages> which extends <h:messages> with support for multiple client IDs in for attributeability to disable HTML escaping and ability to perform markupless rendering like <ui:repeat>message interpolator for Bean Validation that allows a component's label to be inserted in the middle of a messageadded converters for an Iterable to List and DataModelnew protected methods FullAjaxExceptionHandler#findExceptionRootCause() and #findErrorPageLocation() so that it can easier be subclassed
 | 
  | OmniFaces 1.6 | September 19, 2013 | OmniFaces depends on CDI from this version oninjecting, converting and validating HTTP request parameters via CDI @Paramtransparent support for dependency injection (CDI and EJB) inside @FacesConverter and @FacesValidatornew JNDI utility classCDI compatible @ViewScoped annotation specifically for JSF 2.0/2.1useRequestURI attribute for <o:form> to submit to exactly the same URL as in browser's address bar (with query string)
 | 
  | OmniFaces 1.7 | January 13, 2014 | new ValueChangeValidatornew CacheControlFilter which can control cache-related headers of the responseadded SortedTreeModel which holds the <o:tree> children in a TreeSet
 | 
  | OmniFaces 1.8.1 | June 2, 2014 | added <o:deferredScript> which is capable of deferring JavaScript resources to window.onload<o:massAttribute> which sets the given attribute on all nested componentsFacesMessageExceptionHandler which sets any caught exception as a global FATAL faces message<o:cache> has new disabled attribute to temporarily disable the cache and pass-through children directly<o:viewParam> skips converter for null model values so that query string doesn't get polluted with an empty string
 | 
  | OmniFaces 2.0 | November 24, 2014 | NoAutoGeneratedIdViewHandler which throws a runtime exception when an autogenerated JSF client ID is being rendered<o:viewParamValidationFailed> which enables sending either a redirect or error status on validation failure of view parameters<o:graphicImage> which is capable of referencing a byte[] or InputStream property with optional support for data URI format<o:moveComponent> via which components, facets and behaviors can be moved at runtime to a target component in various ways<o:resolveComponent> via which a component can be looked up by its ID and a reference to it put in various scopes<o:validateBean> now supports validating beans at the class level
 | 
  | OmniFaces 2.1 | June 3, 2015 | <o:tagAttribute> to explicitly declare a tagfile attribute which is only exposed in tagfile's own EL scope, to prevent pollution in EL scope of nested tagfilesFacesConfigXml to get faces-config.xml entries which are not available via native JSF API (currently only a mapping of all <resource-bundle> entries can be obtained)<o:graphicImage> now also supports SVG images with explicit type="svg" attribute and fragment attribute for SVG view modes@Cookie to inject a HTTP request cookie in a CDI managed beanCombinedResourceHandler now supports server-side caching of combined resources via org.omnifaces.COMBINED_RESOURCE_HANDLER_CACHE_TTL context param@Eager now also supports JSF 2.2 javax.faces.view.ViewScoped
 | 
  | OmniFaces 2.2 | November 24, 2015 | Second life for @ViewScopedFileServlet - New FileServlet with advanced HTTP range and caching support<o:viewAction> - Fix unintuitive "if" attribute of <f:viewAction>
 | 
  | OmniFaces 2.3 | April 1, 2016 | @ViewScoped - Improved<o:socket> -  For web socket based push which can be accessed via CDI @Push<o:skipValidators> -  To skip all validation during a UICommand action or an ajax requestFileServlet - Supports customizing 404 error handling and attachment file nameBeans#fireEvent() - To fire a CDI event objectMore utilities -  Beans#isActive(scope) | of:formatThousands() | of:formatThousandsUnit() | of:formatNumberDefaultForLocale() | Faces#getViewName() | Ajax#load() | Servlets#getRemoteAddr()
 | 
  | OmniFaces 2.4 | July 1, 2016 | Components#getCurrentActionSource/ActionExpressionsAndListeners() -  Which should ease a.o. logging JSF ajax actions<o:url> -  Which fills the gap caused by absence of JSTL <c:url> in FaceletsFullAjaxExceptionHandler - Got new logException override which allows determining the log reasonof:reverseArray() - To reverse an array
 | 
  | OmniFaces 3.0  | January 3, 2018 | Dependencies are changed to Java 1.8, JSF 2.3, EL 3.0, Servlet 3.1, CDI 2.0 and BV 2.0Removed RichFaces compatibility since End of Life was declared for RichFaces in June 2016OmniFaces initialization will explicitly fail if CDI BeanManageris unavailable during application startup<o:form>now defaults touseRequestURI="true"<o:form>now defaults topartialSubmit="true"<o:validateBean showMessageFor="@violating">will not anymore show "remaining" messages for properties which are not covered by JSF formValidateMultipleFieldswill no longer skip readonly/disabled/unrendered components but instead supply their current model valueorg.omnifaces.component.output.cachepackage has been moved toorg.omnifaces.util.cacheFaces/FacesLocalandServletsutility methods will now throwUncheckedIOExceptioninstead ofIOExceptionAll in 2.x @Deprecatedthings have been removed and replaced by JSF 2.2 native passthrough attributesand other
 | 
 See also
 Other JSF libraries: 
  References
  External links