Implementing customization in WebCenter Portal - Framework Application
Table of Contents
Part 1
1. Why this article will help software developers?
2. What is customization?
3. What is personalization?
4. What is Oracle Composer?
5. Version of software used (Basic concepts remain same)
6. Create new WebCenter Portal -
Framework Application
7. Configure jazn-data.xml
8. Give permissions to Administrator
to Resource Catalog
9. Create Custom SiteCC Tip Layer
10. Create Custom UserCC Tip Layer
11. Implement ComposerSessionOptionsFactory Class
12. Register implementation of
AppsSessionOptionsFactoryImpl with Oracle Composer
13. Configure
WebCenterComposerFilter
14. Redirect Servlet to Enable
Switch Between MDS Customization Layers
15. Add new class called
AppCloseHandler to portal package
16. How to Register
AppCloseHandler
17. Create AppModeBean
18. Create RSS News Feed JSPX page
19. Configure pages.xml
20. What if you are providing link
to customizable page within another page?
21. Use of showDetailFrame for page customization to
drag drop out-of-the-box taskflows directly to JSPX page
22. Personalization of ADF Faces controls using adf-config.xml/ persisting ADF Faces controls to MDS
22. Personalization of ADF Faces controls using adf-config.xml/ persisting ADF Faces controls to MDS
Part 2
23. Default Resource Catalog
24. Adding entries to Default
Resource Catalog
25. Adding your own Resource
Catalog (example with out-of-the-box task flow)
26. Adding your own Resource
Catalog (example with ADF component viz. af:goLink i.e. Hyperlink)
27. Personalization
28. References29. Downloads (Link to JDeveloper application)
Part 1 - Resource catalog, customization and personalization in Oracle WebCenter application
Part 1 - Resource catalog, customization and personalization in Oracle WebCenter application describes steps for implementing customization and personalization, giving permissions to roles to allow logged in users to perform customization or personalization depending on their role, adding
pages to navigational model, personalization of ADF Faces controls using adf-config.xml
pages to navigational model, personalization of ADF Faces controls using adf-config.xml
Click here to visit Part 2 - Resource catalog, customization and personalization in Oracle
WebCenter application describes steps for configuring default resource
catalog, creating and adding your own resource catalogs, how to use of PortalBundle.properties to define strings used in resource catalog
1. Why this article will help software developers?
This is detailed, step-by-step, developer friendly guide with detailed
screenshots, to enable software developers to implement customization.
Information has been compiled from several sources in single document. Downloadable application called MyPersonalizationCustomization.zip has been provided towards end of Part 2
2. What is customization?
Customization means user with administrative privileges can apply
changes that are available to all users
3. What is personalization?
Personalization means user can perform changes preferred by him, and available
only to him. Unless user applies personalization, he will see whatever administrator
has customized. Personalizations change your view—and only your view—of portal
or page. Other users are not affected by changes you make to page
4. What is Oracle Composer?
Without requiring to write single line of code, software developers will
be interested to learn that Oracle Composer can be easily added to their
applications and portals during development at any time to enable customization
and personalization style of operation. As many applications require
"portal-like" features, such as customization and personalization,
Oracle Composer can simply be dragged and dropped onto JSFF/ JSPX page to enable
this powerful capability
5. Version of software used
Implementation and concepts remain more or less similar for resource catalog,
customization, personalization, regardless of version used to develop this functionality
jdk-6u29-windows-x64.exe
jdevstudio11116install.jar
JDeveloper 11.1.1.6.0 details
ADF Business Components
|
11.1.1.61.91
|
Java(TM) Platform
|
1.6.0_29
|
Oracle IDE
|
11.1.1.6.38.61.91
|
Versioning Support
|
11.1.1.6.38.61.91
|
oracle.webcenter.framework_bundle.zip
oracle.webcenter.customization_bundle.zip
6. Create new WebCenter Portal - Framework Application
Figure 1
Figure 2
7. Configure jazn-data.xml
Configure jazn-data.xml
as shown to add groups and users. Create user administrator1, add it to default
Administrator group. Create group Guest, add users guest1, guest2
Figure 3
Figure 4
Click + New User to add 3 users viz. administrator1 (user will be
allowed to customize) and guest1, guest2 (users will be allowed to personalize).
Ensure Users tab is selected. Click + next to Users
Figure 5
Figure 6
Select Application Roles tab, click + to add new role called Guest
(members of this group will be allowed to personalize)
Figure 7
Figure 8
Select Administrator. Click + beside Managed Users and Roles to add
administrator1 to default Administrator group (for Customization)
Figure 9
Figure 10
Similarly add guest1, guest2 to Guest group (for Personalization)
Figure 11
8. Give permissions to Administrator to Resource Catalog
Give permission to Administrator group for Resource Catalog. Select
Resource Grants tab. Click + next to Granted To, click Add Application Role,
Check Administrator, click OK. Check all actions under Actions
Figure 12
Save jazn-data.xml
Save All
9. Create Custom SiteCC Tip Layer
All site-level customizations performed in Edit mode are stored
For detailed information, visit http://docs.oracle.com/cd/E15523_01/webcenter.1111/e10148/jpsdg_page_editor_mds.htm#CHDEEGEE
Expand Portal > Application Sources. Right click package portal, add
new class called SiteCC.java,
as shown in figure below
Figure 13
package
portal;
import
oracle.mds.core.MetadataObject;
import
oracle.mds.core.RestrictedSession;
import
oracle.mds.cust.CacheHint;
import
oracle.mds.cust.CustomizationClass;
public class
SiteCC extends CustomizationClass {
private static final String
DEFAULT_LAYER_NAME = "site";
private String mLayerName =
DEFAULT_LAYER_NAME;
private String mLayerValue =
"webcenter";
public SiteCC() {
super();
}
public CacheHint getCacheHint() {
return CacheHint.ALL_USERS;
}
public String getName() {
return mLayerName;
}
public String[] getValue(RestrictedSession
restrictedSession,
MetadataObject
metadataObject) {
return new String[] { mLayerValue };
}
}
10. Create Custom UserCC Tip Layer
This layer is applied on top of site layer. Personalizations
that user performs in View mode are saved in this user tip layer in folder
created specifically for logged-in user
For detailed information, visit http://docs.oracle.com/cd/E15523_01/webcenter.1111/e10148/jpsdg_page_editor_mds.htm#CHDEEGEE
For detailed information, visit http://docs.oracle.com/cd/E15523_01/webcenter.1111/e10148/jpsdg_page_editor_mds.htm#CHDEEGEE
Expand Portal > Application Sources. Right click package portal, add new class called UserCC.java, as shown in figure below
Figure 14
package
portal;
import
oracle.adf.share.ADFContext;
import
oracle.mds.core.MetadataObject;
import
oracle.mds.core.RestrictedSession;
import
oracle.mds.cust.CacheHint;
import
oracle.mds.cust.CustomizationClass;
public class
UserCC extends CustomizationClass {
private static final String
DEFAULT_LAYER_NAME = "user";
private String mLayerName =
DEFAULT_LAYER_NAME;
private String mLayerValue = null;
public UserCC() {
super();
}
public CacheHint getCacheHint() {
return CacheHint.USER;
}
public String getName() {
return mLayerName;
}
public String[] getValue(RestrictedSession
restrictedSession,
MetadataObject
metadataObject) {
return new String[] { getMLayerValue() };
}
public String getMLayerValue() {
mLayerValue =
ADFContext.getCurrent().getSecurityContext().getUserPrincipal().getName();
return mLayerValue;
}
}
11. Implement ComposerSessionOptionsFactory Class
In this
section,
ComposerSessionOptionsFactory.java
class provided by ADF is implemented to
supply MDS SessionOptions
for each HTTP requestComposerSessionOptionsFactory.java
class as per documentation, defines two layers - Edit and View. You can see
that Edit layer is applied on global level (that is when Oracle WebCenter
Composer is invoked to perform customization). View layer is applied on global
and user levels (this means each user will see global customizations and their
own personalizations.
If
Oracle WebCenter Composer is on, Edit layer is enabled, otherwise View layer. For more information, visit
Expand Portal > Application Sources. Right click package portal, add
new class called ComposerSessionOptionsFactory.java,
as shown in figure below
Figure 15
package
portal;
import
java.util.logging.Level;
import
portal.SiteCC;
import
portal.UserCC;
import
oracle.adf.share.ADFContext;
import oracle.adf.share.security.SecurityContext;
import
oracle.adf.view.page.editor.mds.ComposerSessionOptionsFactory;
import
oracle.adf.view.page.editor.mode.ModeContext;
import
oracle.mds.config.CustClassListMapping;
import
oracle.mds.config.CustConfig;
import oracle.mds.core.SessionOptions;
import
oracle.mds.cust.CustClassList;
import
oracle.mds.cust.CustomizationClass;
import
oracle.mds.cust.CustomizationPolicy;
public class
AppsSessionOptionsFactoryImpl implements ComposerSessionOptionsFactory {
//Edit mode SiteCC
private static final CustomizationClass[]
EDIT_LAYER =
new CustomizationClass[] { new SiteCC()
};
//View mode SiteCC + USerCC
private static final CustomizationClass[]
VIEW_LAYER =
new CustomizationClass[] { new SiteCC(),
new UserCC() };
private static final CustomizationClass[]
EDIT_PERSONAL_LAYER =
new CustomizationClass[] { new UserCC()
};
private String ADMINISTRATOR_ROLE_NAME =
"Administrator";
public AppsSessionOptionsFactoryImpl() {
}
public SessionOptions
createSessionOptions(SessionOptions sessionOptions,
String mode) {
CustomizationClass[] custLayer;
CustConfig custConfig = null;
CustomizationPolicy cPol = null;
SecurityContext stx = ADFContext.getCurrent().getSecurityContext();
if (ModeContext.EDIT_MODE.equals(mode)
&&
stx.isUserInRole(ADMINISTRATOR_ROLE_NAME)) {
//Mode is Edit, change to SiteCC
custLayer = EDIT_LAYER;
} else if
(ModeContext.EDIT_MODE.equals(mode)) {
custLayer = EDIT_PERSONAL_LAYER;
} else {
//Mode is View, change to UserCC +
SiteCC
custLayer = VIEW_LAYER;
}
try {
CustClassList custClassList = new
CustClassList(custLayer);
CustClassListMapping
custClassListMapping =
new
CustClassListMapping("/", null, null, custClassList);
custConfig =
new CustConfig(new CustClassListMapping[]
{ custClassListMapping });
cPol = new
CustomizationPolicy(stx.getUserRoles());
} catch (Exception e) {
e.printStackTrace();
}
if
(sessionOptions.getServletContextAsObject() != null) {
return new
SessionOptions(sessionOptions.getIsolationLevel(),
sessionOptions.getLocale(), custConfig,
sessionOptions.getVersionContext(),
sessionOptions.getVersionCreatorName(),
cPol ==
null ?
sessionOptions.getCustomizationPolicy() :
cPol,
sessionOptions.getServletContextAsObject());
} else {
return new
SessionOptions(sessionOptions.getIsolationLevel(),
sessionOptions.getLocale(), custConfig,
sessionOptions.getVersionContext(),
sessionOptions.getVersionCreatorName(),
cPol ==
null ?
sessionOptions.getCustomizationPolicy() :
cPol);
}
}
}
12. Register implementation of AppsSessionOptionsFactoryImpl with Oracle Composer
1.
Open adf-config.xml, make changes in Overview tab, as shown in
figure below
Figure 16
2.
Switch to Source view in adf-config.xml find <pe:page-editor-config>.
Modify it to <pe:page-editor-config
xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
Below this line and above <pe:security-config> paste below
line
<session-options-factory>portal.AppsSessionOptionsFactoryImpl</session-options-factory>
<pe:security-config>
Read more on adf-config.xml under secion 22. Personalization of ADF Faces controls using adf-config.xml/ / persisting ADF Faces controls to MDS
Read more on adf-config.xml under secion 22. Personalization of ADF Faces controls using adf-config.xml/ / persisting ADF Faces controls to MDS
13. Configure WebCenterComposerFilter
composerFilter
and its filter
mapping must be configured before ADFBindingFilter
Locate
<filter>
<filter-name>adfBindings</filter-name>
<filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
</filter>
Paste below code above it
<!-- WebCenterComposerFilter goes here -->
<filter>
<filter-name>composerFilter</filter-name>
<filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class>
</filter>
<filter>
<filter-name>WebCenterComposerFilter</filter-name>
<filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class>
</filter>
Locate
<filter-mapping>
<filter-name>adfBindings</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Add below code above it
<!-- WebCenterComposerFilter mapping goes here -->
<filter-mapping>
<filter-name>composerFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>WebCenterComposerFilter</filter-name>
<url-pattern>/faces/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
14. Redirect Servlet to Enable Switch Between MDS Customization Layers
Add new class called
AppNavigationUtils.java
to portal
package
portal;
import
javax.faces.context.FacesContext;
import
javax.servlet.http.HttpServletRequest;
public class
AppNavigationUtils {
public static void redirectToSamePage() {
HttpServletRequest request =
(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String url =
request.getRequestURL().toString();
String _adfCtrlState = request.getParameter("_adf.ctrl-state");
url = url +
"?_adf.ctrl-state=" + _adfCtrlState;
System.out.println(url);
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
FacesContext.getCurrentInstance().responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
15. Add new class called AppCloseHandler to portal package
Figure 17
package
portal;
import
javax.faces.event.AbortProcessingException;
import
oracle.adf.view.page.editor.event.CloseEvent;
import
oracle.adf.view.page.editor.event.CloseListener;
public class
AppCloseHandler implements CloseListener {
public void processClose(CloseEvent
closeEvent) throws AbortProcessingException {
AppNavigationUtils.redirectToSamePage();
}
}
16. How to Register AppCloseHandler
After
creating
AppCloseHandler
, you must register it in Oracle Composer
extension file, pe_ext.xml
. Oracle Composer extension file, pe_ext.xml
,
enables you to extend editing capabilities provided by Oracle Composer. pe_ext.xml
file is not available in your application by
default. You must create it youeself to perform such tasks as including add-ons,
property panels, or event handlers. Create new xml file called pe_ext.xml
at
application_home\
src\META-INF
directory. For e.g. this application has pe_ext.xml
created at C:\JDeveloper\mywork\MyPersonalizationCustomization\src\META-INF.
<?xml
version="1.0" encoding="US-ASCII" ?>
<pe-extension
xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<event-handlers>
<event-handler
event="close">portal.AppCloseHandler</event-handler>
</event-handlers>
</addon-config>
</pe-extension>
17. Create AppModeBean
package
portal;
import
javax.faces.event.ActionEvent;
import
oracle.adf.view.page.editor.mode.ModeContext;
public
class AppModeBean {
public void edit(ActionEvent actionEvent) {
ModeContext.getCurrent().setEditMode();
AppNavigationUtils.redirectToSamePage();
}
}
18. Create RSS News Feed JSPX page
Add new JSF Page RSSNewsFeeds.jspx
file
Important
Code is only for your reference. Avoid copying and pasting any code containing Oracle Composer components viz. Change Mode Button, Change Mode Link, Page Customizable, Layout Customizable, Panel Customizable, Show Detail Frame. Drag drop Oracle Composer components for them to function correctly
Code looks like
<?xml version='1.0' encoding='UTF-8'?>
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root
xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:pe="http://xmlns.oracle.com/adf/pageeditor"
xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable">
<jsp:directive.page
contentType="text/html;charset=UTF-8"/>
<f:view>
<af:document id="d1"
title="RSS News Feeds">
<af:form id="f1">
<af:pageTemplate
viewId="/oracle/webcenter/portalapp/pagetemplates/pageTemplate_globe.jspx"
value="#{bindings.pageTemplateBinding}" id="pt1">
<f:facet
name="content">
<af:panelGroupLayout
id="pgl1" layout="vertical">
<af:panelGroupLayout
id="pgl2" layout="horizontal">
<af:outputText
value="#{securityContext.userName}" id="ot1"/>
<af:spacer
width="10" height="10" id="s1"/>
<pe:changeModeLink
id="cml1"/>
</af:panelGroupLayout>
<pe:pageCustomizable
id="pageCustomizable1"
catalog="/oracle/webcenter/portalapp/catalogs/rssViewer-catalog.xml">
<f:facet
name="editor">
<pe:pageEditorPanel
id="pep1"/>
</f:facet>
<pe:layoutCustomizable
id="layoutCustomizable1"
shortDesc="Change
Layout"
type="oneColumn">
<cust:panelCustomizable
id="panelCustomizable2"/>
<f:facet
name="contentA">
<cust:panelCustomizable
id="panelCustomizable3"/>
</f:facet>
<f:facet
name="contentB">
<cust:panelCustomizable
id="panelCustomizable4"/>
</f:facet>
</pe:layoutCustomizable>
</pe:pageCustomizable>
</af:panelGroupLayout>
</f:facet>
</af:pageTemplate>
</af:form>
</af:document>
</f:view>
</jsp:root>
Save All
19. Configure pages.xml
1.
Open pages.xml
Figure 18
2.
Select Root in Hierarchy pane. In Security
section, select Delegate Security. Ensure Manage, Grant, Create, Delete,
Update, Personalize, View are checked for Administrator
Figure 19
3.
In Security section, click + to Add Role Grants. Select Guest
Figure 20
4.
Check View to give permission to Guest
Figure 21
5.
Select Home. Select Inherit Parent Security
radio button
Figure 22
6.
Drag drop RSSNewsFeeds.jspx under Root.
7.
Select RSSNewsFeeds in hierarchy pane. Modify
Title if required. Select Delegate Security radio button. Delete anonymous
role. Grant Personalize, View to authenticated-role, Guest role
Figure 23
20. What if you are providing link to customizable page within another page?
In case you are providing access to customizable JSPX page via another
page, method of granting permission is different. Locate that page in jazn-data.xml. In
Granted To section click + to Add Grantee, Add Application Role, check
Administrator, authenticated-role, OK. Grant permission to authenticated-role
by checking personalize, view under Actions
Figure 24
Grant
permission to Administrator by checking customize, view under Actions. If you
grant customize, view actions to any role, that automatically enables users of
that role to perform customization
Figure 25
Click + alongside URL Attributes, click ExternalId. Type TakePolls (without space. This could be any string value) Under Display Value, as shown in above figure
<?xml version='1.0' encoding='UTF-8'?>
Important
Code is only for your reference. Avoid copying and pasting any code containing Oracle Composer components viz. Change Mode Button, Change Mode Link, Page Customizable, Layout Customizable, Panel Customizable, Show Detail Frame. Drag drop Oracle Composer components for them to function correctly
To add link to JSPX page, go to Portal > Web Content > oracle
> webcenter > portalapp > navigations. Right click navigations, New…
> Under Categories go to Web Tier > Portal. Under Items select Navigation
(Refer Figure 33). Click OK. Provide a file name, say navigationModel.xml. Click
OK. Click to select TakePolls.jspx under Portal > Web Content > oracle
> webcenter > portalapp > pages. Drag drop it under navigationModel
Figure 26
Click + alongside URL Attributes, click ExternalId. Type TakePolls (without space. This could be any string value) Under Display Value, as shown in above figure
To add link to TakePolls.jspx,
say on Home.jspx,
add af:goLink to
Home.jspx, as shown in below code
Important
Code is only for your reference. Avoid copying and pasting any code containing Oracle Composer components viz. Change Mode Button, Change Mode Link, Page Customizable, Layout Customizable, Panel Customizable, Show Detail Frame. Drag drop Oracle Composer components for them to function correctly
Important
Code is only for your reference. Avoid copying and pasting any code containing Oracle Composer components viz. Change Mode Button, Change Mode Link, Page Customizable, Layout Customizable, Panel Customizable, Show Detail Frame. Drag drop Oracle Composer components for them to function correctly
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root
xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:pe="http://xmlns.oracle.com/adf/pageeditor"
xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable">
<f:loadBundle
basename="oracle.webcenter.portalframework.sitestructure.resource.PortalAppPageResource"
var="portalResource"/>
<jsp:directive.page
contentType="text/html;charset=UTF-8"/>
<f:view>
<af:document id="d1"
title="#{portalResource['home_title']}">
<af:form id="f1">
<af:pageTemplate
value="#{bindings.pageTemplateBinding.templateModel}"
id="pt1">
<f:facet
name="content">
<af:group id="g1">
<af:goLink text="Take
Polls" id="gl1"
destination="/faces/wcnav_externalId/TakePolls?wcnav.model=/oracle/webcenter/portalapp/navigations/navigationModel"/>
<pe:pageCustomizable id="hm_pgc1">
<cust:panelCustomizable
id="hm_pnc1" layout="scroll"/>
<f:facet
name="editor">
<pe:pageEditorPanel
id="pep1"/>
</f:facet>
</pe:pageCustomizable>
</af:group>
</f:facet>
</af:pageTemplate>
</af:form>
</af:document>
</f:view>
</jsp:root>
21. Use of cust:showDetailFrame for page customization to drag drop out-of-the-box taskflows directly to JSPX page
Below is code for TakePolls.jspx. Note how cust:showDetailFrame has been nested under cust:panelCustomizable and Polls – Take Polls taskflow has
been dragged and dropped within it, from Resource Palette > WebCenter Portal
- Service Catalog > Task Flows > Polls – Take Polls
Important
Code is only for your reference. Avoid copying and pasting any code containing Oracle Composer components viz. Change Mode Button, Change Mode Link, Page Customizable, Layout Customizable, Panel Customizable, Show Detail Frame. Drag drop Oracle Composer components for them to function correctly
<?xml
version='1.0' encoding='UTF-8'?>
<jsp:root
xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:pe="http://xmlns.oracle.com/adf/pageeditor"
xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable">
<jsp:directive.page
contentType="text/html;charset=UTF-8"/>
<f:view>
<af:document id="d1">
<af:form id="f1">
<af:pageTemplate
viewId="/oracle/webcenter/portalapp/pagetemplates/pageTemplate_globe.jspx"
value="#{bindings.pageTemplateBinding}" id="pt1">
<f:facet
name="content">
<af:panelGroupLayout
id="pgl1" layout="vertical">
<af:panelGroupLayout
id="pgl2" layout="horizontal">
<af:outputText
value="#{securityContext.userName}" id="ot1"/>
<af:spacer
width="10" height="10" id="s1"/>
<pe:changeModeLink
id="cml1"/>
</af:panelGroupLayout>
<pe:pageCustomizable
id="pageCustomizable1">
<cust:panelCustomizable
id="panelCustomizable1" layout="scroll">
<cust:showDetailFrame
text="Take Polls" id="sdf1">
<af:region
value="#{bindings.takepolls1.regionModel}"
id="r1"/>
</cust:showDetailFrame>
</cust:panelCustomizable>
<f:facet
name="editor">
<pe:pageEditorPanel
id="pep1"/>
</f:facet>
<pe:layoutCustomizable
id="layoutCustomizable1"
shortDesc="Change Layout"
type="oneColumn">
<cust:panelCustomizable
id="panelCustomizable2"/>
<f:facet
name="contentA">
<cust:panelCustomizable
id="panelCustomizable3"/>
</f:facet>
<f:facet
name="contentB">
<cust:panelCustomizable
id="panelCustomizable4"/>
</f:facet>
</pe:layoutCustomizable>
</pe:pageCustomizable>
</af:panelGroupLayout>
</f:facet>
</af:pageTemplate>
</af:form>
</af:document>
</f:view>
</jsp:root>
Run application. On Home page, click Take Polls link. On Take Polls
page, click Edit. Click spanner icon to edit task flow parameters at runtime.
Polls – Take Polls has not been covered in this article, that being out of
scope
22. Personalization of ADF Faces controls using adf-config.xml / persisting ADF Faces controls to MDS
In adf-config.xml, View tab, expand dropdown Tag Library URI: to view
type of controls that could be allowed to be personalized
Figure 27
Below are screenshots of list of controls available for each of 3 options, viz. http://xmlns.oracle.com/adf/faces/rich, http://xmlns.oracle.com/adf/faces/customizable, http://xmlns.oracle.com/adf/pageeditor, in Figures 28, 29, 30 respectively. To view type of controls that could be allowed to be personalized for http://xmlns.oracle.com/adf/faces/rich, expand green + dropdown under Tags. Following are the controls ADF Faces controls activeCommandToolbarButton,
calendar, column, commandButton, commandImageLink, commandLink, commandMenuItem,
commandNavigationItem, commandToolbarButton, dialog, panelBox, panelSplitter, panelWindow,
richTextEditor, showDetail, showDetailHeader, showDetailItem, table
Figure 28
Say you choose to add calendar for personalization, under Tag Attributes: calendar, you can select what you can select what you wish to persist. Every ADF Faces control has different properties that could be persisted
Figure 29
Figure 30
Figure 31
Details of other tabs of adf-config.xml, viz, Business Components, MDS Configuration, Controller, are available in below figures
Figure 32
Figure 33
Figure 34