Available since OmniFaces 2.1

The <o:tagAttribute> is a tag handler that can be used to explicitly declare a tag attribute on a Facelets tag file. This makes sure that any tag attribute with the same name on a parent tag file is cleared out, which does not properly happen in Mojarra.

Consider the following custom tag structure:

<my:tag id="foo">
    <my:tag id="bar" />

Inside the nested tag, the #{id} will just evaluate to "bar". However, if this isn't declared on the nested tag like so,

<my:tag id="foo">
    <my:tag />

then #{id} of the nested tag would evaluate to "foo" instead of null, even when you explicitly specify the attribute in the *.taglib.xml file.

This tag handler is designed to overcome this peculiar problem and unintuitive behavior of nested tagfiles in Mojarra.


Just declare the attribute name in top of the tagfile as below.

<o:tagAttribute name="id" />

You can optionally provide a default value.

<o:tagAttribute name="type" default="text" />
Since OmniFaces 2.7/3.2 there is a special case for a <o:tagAttribute name="id"> without a default value: it will autogenerate an unique ID in the form of j_ido[tagId] where [tagId] is the <o:tagAttribute> tag's own unique ID.
Documentation & Sources