How do you create your own ADF Faces skin? - jsf

We are using the default Oracle ADF Faces 10g default skin. It looks super nice, but we want to make tweaks to it (changing the CSS and also how certain components are rendered -- for example the table component will place buttons above and below the table component-- we want them only on the bottom-- this appears to require a programmatic change in order to change this behavior).
Has anyone had success creating their own ADF Faces skin? Please post what you had to do to change component behavior.

we followed this documentation for webcenter spaces:
http://www.oracle.com/technetwork/middleware/webcenter/owcs-r11-extend-spaces-wp-132596.pdf
The documentation makes use of an already existing oracle extension (how to download the source is in the document).
Once we add the application, we simply added a new entry in the META-INF\trinidad-skins.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<skins xmlns="http://myfaces.apache.org/trinidad/skin">
<!-- Previous skins here ... -->
<skin>
<id>myskin.custom.desktop</id>
<family>My Skin</family>
<render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
<style-sheet-name>custom/spaces/skins/myskin/myskin.css</style-sheet-name>
<extends>default.desktop</extends>
</skin>
</skins>
and added the css and img files inside the MET-INF directory in the specified paths (e.g. META-INF/custom/spaces/skins/myskin/myskin.css).
For custom applications on ADF the procedure should be the same.

Since Oracle 11g, Oracle prodives the so called 'skin editor' for your ADF applications.
Until 11.1.7.0, the skin editor was only available as an external application. In the current versions, you can choose for which application version you want to create the skin for your ADF Application (the wizard will give you an option for that when creating a new skin project).
Download Skin Editor:
http://www.oracle.com/technetwork/developer-tools/adf/downloads/index.html
Install instructions:
https://docs.oracle.com/middleware/1212/skineditor/ADFSI/adfsi.htm#ADFSI102
However, since 11.1.7.0 the skin editor is integrated with the Oracle JDeveloper IDE. I already used it for a couple of projects. Although it is easy to get into it and to configure your custom skin, you have to keep in mind that you have to do a lot of manual work to "fully" replace the default skin. There are some components which rely on icons - therefore you have to replace them one by one, using graphical editors (e.g. adobe photoshop or another comparable editor that suits you).

Related

Alfresco replace component advsearch

i successfully modified alfresco advseach.
Now i have to replace the original. I really don't know how can i do this, until this moment i was working in share/target but i can't do that anymore. I need to somehow rewrite default url of advsearch. I need that Alfresco call my advsearch instead of default advsearch after clean installation or after command mvnclean.
I think that this should working:
<extension>
<modules>
<module>
<id>ADVSearchExt</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<components>
<component>
<region-id>search</region-id>
<source-id>advsearch</source-id>
<scope>page</scope>
<url>/comp/advsearchext</url>
</component>
</components>
</module>
</modules>
</extension>
It looks like you've created an alternative WebScript for the Component and you wish to swap it out. It's not possible to reconfigure an existing Component configuration as you are trying to do. What you actually need to do is to create one extension to remove the default component (see this blog post) and then provide another component to render your WebScript (see this blog post).
NOTE: On subsequent reading of the question, I've realised that this original answer doesn't directly answer the question, however it does contain useful related information... I'll try and answer the actual question as well!
Assuming you're using Alfresco 5.0 or 5.1 then the only way of accessing the advanced search page (via standard navigation) would be via the drop-down menu option in the header bar.
The header bar is an rendered by Aikau and it is a relatively simple exercise to customize the header bar to navigate to an alternative page when you click on that "Advanced Search..." menu item.
This blog post is the first in a 3-part series describing how you can customize the header bar.
The widget that you need to customize is the "alfresco/header/SearchBox" widget. Unfortunately, at the moment it doesn't off a simple configuration option for changing the page to navigate to. In this scenario you could raise an issue on the Aikau Github page to make a request for this feature to be added. This would require that you wait for the feature to be included in a future release (releases are weekly) and then make use of that new configuration option.
The alternative would be to extend the default SearchBox widget and create a new extension module that swaps out the default SearchBox with your custom version. You would need to extend the postCreate function and remove alfresco/menus/AlfMenuItem that is created and replace it with one that has an appropriate targetUrl.
Unfortunately this is neither the most future proof or simplest solution, but is is possible. The most future proof solution (in terms of working with future upgrades to Alfresco) would be to make the feature request as clearly there are benefits to being able to reconfigure the advanced search page.

How to overcome the error "The unknown namespace tag xe:applicationLayout cannot be used as a control."

I created a sort of template DB for my Xpages applications. It is not a true template, just a design I can grab code from to start a new Xpages db.
I copied over a cc and got this error:
"The unknown namespace tag xe:applicationLayout cannot be used as a control, as the namespace http://www.ibm.com/xsp/coreex is not known."
I tried to creating a new cc in the target db and just pasting the source in, still got that error. What does that error mean and how can I overcome it?
I mean, come on, I can't copy and past design elements from one db to another???
It means that you haven't enabled the ExtLib in the application's properties. If you do to the Xsp Properties (in 9.0+) or Application Properties (in ancient releases), you can enable the com.ibm.xsp.extlib.library library, assuming you have it installed.
There is an event that can be triggered when dropping a native control onto an XPage or Custom Control. That event is used to enable the library in Xsp Properties. It's also used to enable the relevant abbreviation (xe, xc etc) on the pages. The bottom line is copy and paste isn't that sophisticated!
And it's not exclusive to the Extension Library. Try copying and pasting a Custom Control to a brand new XPage and save it. It will give you virtually the same message, but this time saying "xc" is not bound.
You need to enable the Extension Library manually if you're copying a custom control across. Alternatively, you can just drag and drop any Extension Library control onto any page in the application, then delete it!
If you're copying source code from one XPage to another, if it includes anything other than an xp tag, you need to check the relevant xml namespace is specified in the xp:view tag. So in the case of copying source code for the application layout, also adding xmlns:xe="http://www.ibm.com/xsp/coreex" to the xp:view tag.
(This was too long an elaboration to just add as a comment to Jesse's answer, which I've up-voted)

TODO tag comments for SSJS in Xpages in Notes Version 9

At one of the Lotusspere sessions in Orlando, the //TODO comment tag was mentioned. I thought that this was an extremely useful feature but sadly in looks to me like it does not work in SSJS?
Task Tags in XSP sources
Any chance this has been fixed in version 9? It does work in 8, but you need to place it outside your SSJS code block.
I am using the Domino Designer 9 beta build from December (the public beta). The Task Tags functionality still does not include TODO tags in SSJS script libraries and SSJS code blocks.
--
Do the following to control what contents the Tasks view shows:
Choose the Configure Contents
Select "On any element in same project"
You can do the same with the Problems view.
It may have been my session. It's standard Eclipse functionality, so only works in certain editors like the XML Editor. You may have hit the same gotcha I hit during preparation. Enabling it in the Tasks view is not enough. You need to enable it in the relevant editors in the Preferences. Open up preferences and type "Task" in the filter box. It should then get picked up from any SSJS in the source pane. It gets updated when the project is built.

Adding item to all view menus

In Eclipse, it is possible to extend to any pop-up menu using the following special location URI:
popup:org.eclipse.ui.popup.any
Is it possible to do the same for the view menus (the little triangle in each view)? (I am developing an Eclipse RCP application, not extending the IDE. The purpose for this item is to help debugging and testing of the application.).
The short answer: no, that is not possible, unless you add the items by hand for all views.
The slightly longer answer: yes, if you
manually go through the view registry
create a new AbstractContributionFactory with the location URI "menu:<view-id>" and whatever createContributionItems(...) you want for each. (Alternatively you can create AbstractMenuAdditionCacheEntry or even better MenuAdditionCacheEntry - though these are internal and requires a little extra work... The last allows you to have a centrally defined menus extension point that is used for all these additions.)
add these to the workbench using IMenuService.addContributionFactory(AbstractContributionFactory factory) (use IWorkbenchWindow.getService(IMenuService.class) to acquire the menu service).
I haven't tested the above recipe, but I have used something very similar in an application...

How can a graphic be placed in the OneUI .lotusBanner area using the Application Layout Control

I am using the Extension Libraries Application Layout Control and need to have a banner graphic placed in the .lotusBanner div on the right. How can this be done as it seems that the Application Layout Control can't be modified.
You could use the utilityLinksFacet on the extended control that Steve Pridemore did.
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&documentId=CED2E61A75526CD086257997006DA95B
or you could use onload javascript to add it.
I was able to place a graphic in the upper right of the Application Layout Control in the Banner area by doing the following:
In the control under the Banner > Utility links I added a Basic node. For the node I specified the href and image. This worked and placed the image n the correct spot.
Artifacts of this were the location of the Banner Application links. To remedy this I used some CSS for the .lotusBanner ul.lotusLinks {margin-top: 45px;position:absolute;}
The margin-top was to push the links down so I could enlarge the logo that is used by the Application Layout Control.
The applicationLayout control in ExtLib is, as you have found out, locked down to only allow certain aspects of the configuration to be changed by the developer. You can add links to different sections of the applicationLayout but nothing beyond that.
One possible alternative is to NOT use the applictionLayout control itself but create your own approximation of it in a custom control, You would need to add all the necessary panels/divs with the special oneUI2 classes in all the correct places and then add editable areas and callbacks within these panels for the parts that you would want to customize throughout the application. All of the other sections in the applicationLayout control, like the bannerUtilityLinks are created using the ListofLinks control that is also found in the Extension Library.

Resources