Vous êtes sur la page 1sur 28

1/19/2008

ADF Model Layer

Dr. Ahmad Taufik Jamil


B.Sc.Med(UKM), MD(UKM),
M.Comm.Health(Health Management)(UKM), M.Sc(IT)(UPM)
Head IT Department, National University
Malaysia

ADF Model Layer


• ADF Data Controls
– Defining the data controls
• ADF Bindings
– Using the data controls

1
1/19/2008

ADF Data Controls;


Defining the Data Control

Setup Workspace & Java Class


• Create new workspace: “DataControlTest”
• Use “Web Application [JSF, EJB]”
template.
• In “Model” project, create a Java class,
called “User”.
• Accept all defaults except the name, and
using “book.model” as the package name.

2
1/19/2008

Add the followings to the Java class, User.java:

package book.model;

import java.util.Date;

public class User {


public User() {
}

private String name;


private Date birthday;

public long userAge(int fudgeFactor){


return (long) (21 + fudgeFactor);
}

public void setName(String name){


this.name=name;
}

public String getName(){


return name;
}

public void setBirthday(Date birthday){


this.birthday = birthday;
}

public Date getBirthday(){


return birthday;
}

3
1/19/2008

User.java
• This java class conforms to the JavaBean
standard;
– Member variables (attributes) are private
– Accessors method

• Compile the file and fix any error

4
1/19/2008

Create the Data Control


• 2 ways:
– Drag & drop: From the application navigator,
drag the java class (User.java) and drop it into
the open Data Control Palette
– Right-Click Menu: On the User.java file, in
the navigator, select Create Data Control from
the right-click menu.
• Display and expand the nodes of the Data
Control Palette.

5
1/19/2008

The data control definition


• Notice that two files have appeared:
– User.xml
– DataControls.dcx

6
1/19/2008

User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<JavaBean xmlns="http://xmlns.oracle.com/adfm/beanmodel"
version="10.1.3.36.73"
id="User" BeanClass="book.model.User" Package="book.model"
isJavaBased="true">
<Attribute Name="birthday" Type="java.util.Date"/>
<Attribute Name="name" Type="java.lang.String"/>
<MethodAccessor IsCollection="false" Type="long" id="userAge"
ReturnNodeName="Return">
<ParameterInfo id="fudgeFactor" Type="int" isStructured="false"/>
</MethodAccessor>
<ConstructorMethod IsCollection="false" Type="void" id="User"/>
</JavaBean>

User.xml
• All information to describe User.java
• Define al elements in User.java;
– each attributes,
– getter & setter and
– Methods; userAge() method with its output & input
• Never need to edit this file, if you make changes
in the User class, just regenerate the data
control definition again.
• Each java class will have it’s own XML
description file

7
1/19/2008

DataControl.dcx
<?xml version="1.0" encoding="UTF-8" ?>
<DataControlConfigs xmlns="http://xmlns.oracle.com/adfm/configuration"
version="10.1.3.36.73" Package="model" id="DataControls">
<JavaBeanDataControl SupportsTransactions="false"
SupportsFindMode="false"
SupportsResetState="false" SupportsRangesize="true"
SupportsSortCollection="true" SupportsUpdates="false"
id="UserDataControl"
xmlns="http://xmlns.oracle.com/adfm/datacontrol"

FactoryClass="oracle.adf.model.generic.DataControlFactoryImpl"
Definition="book.model.User"
BeanClass="book.model.User"/>
</DataControlConfigs>

DataControl.dcx
• Index file for all data control within a
project.
• There will only be one DataControl.dcx to
summarize all java class, within the same
project folder.

8
1/19/2008

DataControl.dcx
• SupportsTransactions is set to "false“.
• Try set it to “true” and save.
• Refresh Data Control palette, and see
what will happen.
• Return back it to “false” and save.

Enhance the data control


• Serving as an abstract description of a
service.
• Also allows you to:
– Add default values
– Control hint (field label & tooltips)
– Simple declarative validation

9
1/19/2008

Enhance the data control


• Select User.xml file in the navigator and
look at the Structure windows.
• Double click one of the available
attributes; birthday, the attribute editor
dialog will display.

10
1/19/2008

Enhance the data control


• Select Validation and click New to get
started.
• Edit the properties of the birthday attribute
to add a validation for birthday greater
than or equal to “1900-01-01” with an error
message.
• Click OK

11
1/19/2008

Enhance the data control


• Add control hints for Label Text
(“Birthday”)
• For Format Type (“Simple Date”)
• Click “Apply” then “OK”.

12
1/19/2008

Enhance the data control


• You will see changes at User.xml file
• A java resources bundle file,
UserMsgBundle.java is created

13
1/19/2008

New User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<JavaBean xmlns="http://xmlns.oracle.com/adfm/beanmodel" version="10.1.3.36.73"
id="User" BeanClass="book.model.User" Package="book.model"
isJavaBased="true" MsgBundleClass="book.model.UserMsgBundle">
<Attribute Name="birthday" Type="java.util.Date" DefaultValue=""
PrecisionRule="false" Precision="0" Scale="0">
<CompareValidationBean xmlns="http://xmlns.oracle.com/adfm/validation"
OnAttribute="birthday" ResId="birthday_Rule_0"
OperandType="LITERAL" Inverse="false"
CompareValue="1900-01-01"
CompareType="GREATERTHANEQUALTO"/>
</Attribute>
<Attribute Name="name" Type="java.lang.String"/>
<MethodAccessor IsCollection="false" Type="long" id="userAge"
ReturnNodeName="Return">
<ParameterInfo id="fudgeFactor" Type="int" isStructured="false"/>
</MethodAccessor>
<ConstructorMethod IsCollection="false" Type="void" id="User"/>
</JavaBean>

14
1/19/2008

The New User.xml


• Declarative validation rule has been
added.
• Validation error message and any
definition for control hints is not in this file
• The string used for the control hints and
declarative validation rules are all
contained within an array of name value
pair, sMessageStrings, within
UserMsgBundle.java

UserMsgBundle.java
package book.model;

import oracle.jbo.common.JboResourceBundle;
// ---------------------------------------------------------------------
// --- File generated by Oracle ADF Business Components Design Time.
// --- Custom code may be added to this class.
// --- Warning: Do not modify method signatures of generated methods.
// ---------------------------------------------------------------------
public class UserMsgBundle extends JboResourceBundle {

static final Object[][] sMessageStrings =


{
{ "birthday_FMT_FORMAT", "yyyy-MM-dd" },
{ "birthday_Rule_0", "Errorlah" },
{ "birthday_FMT_FORMATTER", "oracle.jbo.format.DefaultDateFormatter" },
{ "birthday_LABEL", "Birthday" }};

/**This is the default constructor (do not remove)


*/
public UserMsgBundle() {
}

/**@return an array of key-value pairs.


*/
public Object[][] getContents() {
return super.getMergedArray(sMessageStrings, super.getContents());
}
}

15
1/19/2008

Summary
• Creating Java class
– User.java
• Define the data controls
– The Data Control definition files:
• DataControls.dcx
• User.xml
– Data Controls Palette
• Enhance the data controls
– Add default values
– Control hint (field label & tooltips)
– Simple declarative validation

ADF Bindings;
Using the Data Control

16
1/19/2008

Create an empty page


• On the ViewController project, create a
JSF page called “firstPage.jsp”
• (by selecting JSF JSP from the web
tier/JSF category in the New Gallery.
Make sure you select all ADF Faces
librarie in step 3 of the wizard and accept
the default selection for everything else)

Bind the Attributes


• Drag a PanelForm from the ADF Faces
Core Component Palette page onto
firstPage.jsp
• From the Data Control Palette, drag the
name attribute and drop it as “ADF Input
Text w/Label” inside of the af:panelForm
• Repeat this operation for the birthday
attribute. This time select Dates>ADF
Input Date w/Label

17
1/19/2008

firstPage.jsp
<af:panelForm>
<f:facet name="footer"/>
<af:inputText value="#{bindings.name.inputValue}"
label="#{bindings.name.label}"
required="#{bindings.name.mandatory}"
columns="#{bindings.name.displayWidth}">
<af:validator binding="#{bindings.name.validator}"/>
</af:inputText>
<af:selectInputDate value="#{bindings.birthday.inputValue}"
label="#{bindings.birthday.label}"
required="#{bindings.birthday.mandatory}">
<af:validator binding="#{bindings.birthday.validator}"/>
<f:convertDateTime pattern="#{bindings.birthday.format}"/>
</af:selectInputDate>
</af:panelForm>

18
1/19/2008

firstPage.jsp
• You will notice expression beginning with
“#{bindings.”
• You will also see references to validator
and a converter (f:convertDateTime) which
refer to these expression using ‘binding’
object

Examine the ‘Bindings’


• Binding is a reference to data that is being
managed by the ADF Model.
• When the page is displayed, any attributes
required on that page are exposed in a
specific object called binding.
• Binding object is like a bucket containing
all the data that this particular page needs.
– Bucket is emptied and refilled with a new set
of data as the user navigates between pages.

19
1/19/2008

Attribute Binding Editor


• In the JSF visual editor (design tab), right
click on the name field, select Edit Binding.
• This will display Attribute Binding Editor for
the field (name).
• Showing that is indeed linked with the
UserDataControl (Data control)- refer to
DataControl.dcx.
• The information exist is in Page Definition
File (Another XML metadata)

• The information shown in this


dialog is defined in Page
Definition file;
firstPagePageDef.xml

20
1/19/2008

• In the visual editor, select Go To Page


Definition from right-click menu
• See ‘firstPagePageDef.xml’
<pageName>PageDef.xml

<?xml version="1.0" encoding="UTF-8" ?>


<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
version="10.1.3.41.57" id="bindingPageDef“ Package="view.pageDefs">
<parameters/>

<executables>
<iterator id="UserDataControl_rootIter" RangeSize="10"
Binds="root“ DataControl="UserDataControl"/>
</executables>

<bindings>
<attributeValues id="name" IterBinding="UserDataControl_rootIter">
<AttrNames>
<Item Value="name"/>
</AttrNames>
</attributeValues>
<attributeValues id="birthday“ IterBinding="UserDataControl_rootIter">
<AttrNames>
<Item Value="birthday"/>
</AttrNames>
</attributeValues>
</bindings>

</pageDefinition>

21
1/19/2008

firstPage.jsp
<af:panelForm>
<f:facet name="footer"/>
<af:inputText value="#{bindings.name.inputValue}"
label="#{bindings.name.label}"
required="#{bindings.name.mandatory}"
columns="#{bindings.name.displayWidth}">
<af:validator binding="#{bindings.name.validator}"/>
</af:inputText>
<af:selectInputDate value="#{bindings.birthday.inputValue}"
label="#{bindings.birthday.label}"
required="#{bindings.birthday.mandatory}">
<af:validator binding="#{bindings.birthday.validator}"/>
<f:convertDateTime pattern="#{bindings.birthday.format}"/>
</af:selectInputDate>
</af:panelForm>

<?xml version="1.0" encoding="UTF-8" ?>


<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
version="10.1.3.41.57" id="bindingPageDef“ Package="view.pageDefs">
<parameters/> Refer to
DataControl.dcx
<executables>
<iterator id="UserDataControl_rootIter" RangeSize="10" Binds="root“
DataControl="UserDataControl"/>
</executables>

<bindings>
<attributeValues id="name" IterBinding="UserDataControl_rootIter">
Refer to section
<AttrNames> <executables> in the
<Item Value="name"/> same file
</AttrNames>
</attributeValues>
<attributeValues id="birthday“ IterBinding="UserDataControl_rootIter">
<AttrNames>
<Item Value="birthday"/>
</AttrNames>
</attributeValues>
</bindings>
</pageDefinition>

22
1/19/2008

Linkage from page..


• Binding expression
(#{bindings.birthday.inputValue} in JSF) to
• AttributeValues (Page Definition File) to
• Iterator (Page Definition File) to
• Data Control.

#{bindings.birthday.inputValue}
• bindings : data managed by ADFm
• birthday : attribute mapped in Page
Definition file
• inputValue : actual data of the attribute in
runtime.
• Format:
#{bindings.MyBindingObject.propertyName.attributeName}

23
1/19/2008

“Bind to Data” dialog

“Bind to Data” dialog

24
1/19/2008

Contents
• ADF Bindings
– Bindings (Most cases we are interested in data listed
under this node, it contain the available data in the
context of the current page)
– Data (use to access the bound data element of any
page within application)
• JSF Managed Beans
– Contain managed bean
• JSP Objects
– General expression scope available in JSPs, such as
sessionScope, coookies etc.

Binding Master File


• DataBindings.cpx
• Master mapping file that the framework
uses to associate a page (JSF), with Page
Definition file

25
1/19/2008

01: <?xml version="1.0" encoding="UTF-8" ?>


02: <Application xmlns=http://xmlns.oracle.com/adfm/application version="10.1.3.41.57"
id="DataBindings" SeparateXMLFiles="false“ URL path of the
Package="viewcontroller" ClientType="Generic">
page
03: <pageMap>
04: <page path="/firstPage.jsp" usageId="firstPagePageDef"/>
05: </pageMap>
List references to page definition
06: <pageDefinitionUsages>
07: <page id="firstPagePageDef“ path="viewcontroller.pageDefs.firstPagePageDef"/>
08: </pageDefinitionUsages>

09: <dataControlUsages>
10: <dc id="UserDataControl" path="book.model.UserDataControl"/>
11: </dataControlUsages>
12: </Application>

Web.xml
<context-param>
<param-name>CpxFileName</param-name>
<param-value>viewcontroller.DataBindings</param-value>
</context-param>

26
1/19/2008

Summary
• Creating JSF page
– firstPage.jsp
• Binding File
– DataControl.dcx : define data controls
– firstPagePageDef.xml : define binding used on a
particular page
– DataBinding.cpx : define the relationship between
PageDef files and page file (jsf). It also define the
data controls used within the project.
• Reference to DataBinding.cpx
– Web.xml

Review of files
Description Files Notes
Java class/EJB User.java

Data Control Definition User.xml Describe User.java. Each java class will
have it’s own <filename>.xml

DataControls.dcx Index file for all data control. Only one dcx
file for each project folder.
JSP/JSF firstPage.jsp

Page Definition firstPagePageDef.xml Contain data required for the jsp file

Binding master file DataBindings.cpx Master mapping to associate jsp file with
page definition file
Others web.xml Defining the name & location of the
DatBinding.cpx

27
1/19/2008

Dialog box
Dialog box Notes

Attribute editor For user.xml

Attribute binding editor For field, to show mapping in page definition


for field in jsp
Bind to data dialog To browse available object that can be bound
to an attribute
Create expression for jsp file

28

Vous aimerez peut-être aussi