You don't need a custom component. Just look around for existing component libraries first. Tomahawk for example has a t:inputFileUpload component, as mentioned before. You can find here an useful article about how to integrate and use it in a Sun JSF Mojarra environment: http://balusc.blogspot.com/2008/02/uploading-files-with-jsf.html It is actually relatively simple.