In the process of upgrading our ADF application from version 11.1.1.4.0 to version 11.1.2.0.0 we stumbled upon problem using declarative components. In our version 11.1.1.4.0 application we ‘worked around’ having to declare declarative components in a separate project by writing our ‘own’ Tag classes and tag library. This was mainly because JDeveloper 11.1.1.4.0 generates those files only when deploying the project and we don’t want the separation of those components into another project.

In JDeveloper 11.1.2.0.0 those files are generated whenever you compile your sources. A huge improvement, but it breaks our usage ;-) . When solving this problem i always try to do it the ‘framework way’ and started the wizard.

ADF Declarative Component
Launches the Create ADF Declarative Component wizard, in which you create the declarative component and configure it for use in the current project. To enable this option, you must select a project or a file within a project in the Application Navigator.

and configure it for use in the current project” i thought. That is exactly what we want. However that is *NOT* what you get. You must still deploy it to get it working (according the documentation), so i don’t know why they put that sentence in there; maybe they confuse project and application.

But it still is more usefull than 11.1.1.4.0 ever was. You only need to create a ADF library deployment profile, deploy the project and copy the generated .tld file into your public_html/WEB-INF/ directory. We just needed to remove our own Tag classes and most of the functionality was functioning again. This way we can still edit the .jspx files of our declarative component and refresh our running application to see the changes.

Update: if you are upgrading from 11.1.1.4.0 you might check that you haven’t used the name ‘component’ as the componentVar. You’ll get very strange errors during compilation in files that are generated and removed again (for example: cannot access com.sun.facelets.tag.jsf.ComponentHandler or cannot access com.sun.facelets.TemplateClient). Rename the variabele (and usages of course) to ‘comp’ and everything will work again.