i want to build a custom JSF Component. Now i read some docs from oracle and saw a few code Examples. The problem is i am a bit confused:
It seems there are two ways to build a custom component with JSF 2.0+. As far as i understood since JSF 2.0 i can use these Composite Components to build my own component.
But do they have any disadvantages compared to the "Classical" Component ?
My Component will be rather complex do i loose anything (beside downwards compability) when i use Compisite Components ?
For example my Component will have some work todo in java, is this possible with Composite Components ?
JSF provides the concept of composite components with Facelets. Composite component is a special type of template that acts as a component in your application. A composite component consists of markup tags and other existing components.
A composite component is a component that consists of a collection of markups and other existing components. It is a reusable, user-created component that is capable of a customized, defined functionality and can have validators, converters and listeners attached to it like a any other JavaServer Faces component.
A composite component is useful if you want to represent a bunch of closely related existing tags/components/HTML as a single and reuseable component by pure XML means.
A custom component would be the only way when there are no standard JSF tags/components available to achieve the requirement. E.g. <input type="file">
, <input type="range">
, etc. Note that such a custom component can in turn be used in a composite, whenever desireable.
Makes totally sense, right?
You can create a so-called "backing component" class extending UINamingContainer
(or at least implementing NamingContainer
) and bind it to the composite by <cc:interface componentType>
. You can find several examples in my answers here.
Do however note that sometimes a composite component isn't suitable, you'd need to create a tag file instead. For example when you want to have a custom and reuseable <h:column>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With