Intégration du médiateur JDBC à la couche présentation
Le service DMS (Data Mediator Service) JDBC peut être utilisé conjointement avec les technologies de couche présentation des applications Web, telles que JavaServer Pages Standard Tag Library (JSTL) et JavaServer Faces (JSF).
Ce document suppose une compréhension générale des technologies JavaServer Pages Standard Tag Library (JSTL) et JavaServer Faces (JSF). En ce qui concerne JSF, la connaissance du composant UIData et de la structure de fichiers générale d'une application Web dynamique JSF est particulièrement recommandée. Pour obtenir une présentation concise de JSF et JSTL, reportez-vous aux rubriques de la section Objets de données de service (SDO).
Le service DMS JDBC et la technologie JSTL sont particulièrement compatibles du fait que le code d'accès JSTL est équivalent au code nécessaire pour accéder aux attributs et aux listes à l'intérieur d'un objet de données. Par exemple, par rapport à un objet de données Customer racine, l'expression JSTL :
${rootDO.CUSTOMER[index].CUSTNAME}
est équivalente au code Java™ pour un objet données :
rootDO.getList("CUSTOMER").get(index).get("CUSTNAME")
Cela s'explique par le fait que la notation décimale du langage d'expression JSTL est en corrélation avec une méthode getter() en code Java, et que la notation des crochets vous autorise à accéder aux éléments d'une liste.
Le service DMS JDBC et JSF sont particulièrement bien adaptés l'un à l'autre car le datagraphe généré par le service DMS JDBC est capable de compléter un composant UIData JSF sans nécessiter de transformation. Le composant UIData utilise une balise dataTable qui prend une liste en tant qu'entrée pour remplir la table. Cela fonctionne bien avec le datagraphe parce qu'il suffit de transmettre la liste racine du datagraphe à la table de données. La façon la plus courante de disposer le datagraphe dans la table de données consiste à afficher chaque attribut de l'objet de données de la liste extraite à partir de la racine dans sa propre colonne et d'incorporer chaque relation supplémentaire avec l'objet de données dans une nouvelle table de données contenue dans la liste de l'objet de données parent. L'utilisation de cette méthode au lieu d'une table ResultSet traditionnelle élimine les informations en double et permet d'identifier plus facilement la séparation des enfants de l'objet parent. Vous trouverez un exemple de la façon dont le scénario Customer et Order est disposé dans une table de données illustré dans la section Exemple : Utilisation de tables de données JavaServer Faces et JDBC Mediator.
Exemple : Utilisation de tables de données JavaServer Faces et JDBC Mediator
Cet exemple propose un code provenant d'une page Faces JSP. Il illustre l'utilisation des tables de données JavaServer Faces et JDBC Mediator dans une application.
Il contient la balise dataTable du composant UIData avec toutes les informations du client, ainsi que ses commandes. Chaque attribut client a sa propre colonne. Les commandes client sont incorporées dans une autre table de données contenant chacun des attributs de commande dans des colonnes séparées. A l'instar de tout autre attribut client, cette table de données des commandes incorporée possède sa propre colonne dans chaque ligne Client.
<h:dataTable id="table1" value=">{pc_Customers.customer}" var=
"varcustomer" styleClass="dataTable">
<h:column id="column1">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Customerid" id=
"text1"></h:outputText>
</f:facet>
<h:outputText id="text2" value=">{varcustomer.CUSTOMERID}"
styleClass="outputText">
<f:convertNumber />
</h:outputText>
</h:column>
<h:column id="column2">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custfirstname"
id="text3"></h:outputText>
</f:facet>
<h:outputText id="text4" value=">{varcustomer.CUSTFIRSTNAME}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column3">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custlastname"
id="text5"></h:outputText>
</f:facet>
<h:outputText id="text6" value=">{varcustomer.CUSTLASTNAME}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column4">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custstreetaddress"
id="text7"></h:outputText>
</f:facet>
<h:outputText id="text8" value=">{varcustomer.CUSTSTREETADDRESS}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column5">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custcity" id="text9">
</h:outputText>
</f:facet>
<h:outputText id="text10" value=">{varcustomer.CUSTCITY}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column6">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custstate" id=
"text11"></h:outputText>
</f:facet>
<h:outputText id="text12" value=">{varcustomer.CUSTSTATE}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column7">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custzipcode"
id="text13"></h:outputText>
</f:facet>
<h:outputText id="text14" value=">{varcustomer.CUSTZIPCODE}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column8">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custareacode"
id="text15"></h:outputText>
</f:facet>
<h:outputText id="text16" value=">{varcustomer.CUSTAREACODE}"
styleClass="outputText">
<f:convertNumber />
</h:outputText>
</h:column>
<h:column id="column9">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Custphonenumber"
id="text17"></h:outputText>
</f:facet>
<h:outputText id="text18" value=">{varcustomer.CUSTPHONENUMBER}"
styleClass="outputText">
</h:outputText>
</h:column>
<h:column id="column10">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Customers_orders"
id="text19"></h:outputText>
</f:facet>
<h:dataTable id="table2" value=">{varcustomer.CUSTOMERS_ORDERS}"
var="varCUSTOMERS_ORDERS" styleClass="dataTable">
<h:column id="column11">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Ordernumber"
id="text20"></h:outputText>
</f:facet>
<h:outputText id="text21"
value=">{varCUSTOMERS_ORDERS.ORDERNUMBER}"
styleClass="outputText">
<f:convertNumber />
</h:outputText>
</h:column>
<h:column id="column12">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Orderdate"
id="text22"></h:outputText>
</f:facet>
<h:outputText id="text23" value=">{varCUSTOMERS_ORDERS.ORDERDATE}"
styleClass="outputText">
<f:convertDateTime />
</h:outputText>
</h:column>
<h:column id="column13">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Shipdate"
id="text24"></h:outputText>
</f:facet>
<h:outputText id="text25"
value=">{varCUSTOMERS_ORDERS.SHIPDATE}"
styleClass="outputText">
<f:convertDateTime />
</h:outputText>
</h:column>
<h:column id="column14">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Customerid"
id="text26"></h:outputText>
</f:facet>
<h:outputText id="text27"
value=">{varCUSTOMERS_ORDERS.CUSTOMERID}" styleClass="outputText">
<f:convertNumber />
</h:outputText>
</h:column>
<h:column id="column15">
<f:facet name="header">
<h:outputText styleClass="outputText" value="Employeeid"
id="text28"></h:outputText>
</f:facet>
<h:outputText id="text29"
value=">{varCUSTOMERS_ORDERS.EMPLOYEEID}" styleClass="outputText">
<f:convertNumber />
</h:outputText>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>