Integration von JDBC-Mediator in die Darstellungsschicht
Der JDBC Data Mediator Service (DMS) kann zusammen mit Technologien für Darstellungsschichten der Webanwendung wie JavaServer Pages Standard Tag Library (JSTL) und JavaServer Faces (JSF) verwendet werden.
In dieser Beschreibung werden allgemeine Kenntnisse der Technologien JavaServer Pages Standard Tag Library (JSTL) und JavaServer Faces (JSF) vorausgesetzt. Insbesondere sollten für JSF die UIData-Komponente und die allgemeine Dateistruktur einer dynamischen JSF-Webanwendung bekannt sein. Eine Kurzübersicht über JSF und JSTL finden Sie in den Artikeln zum Thema Service Data Objects.
JDBC DMS und JSTL funktionieren miteinander, weil der JSTL-Zugriffscode dem Code entspricht, der für den Zugriff auf Attribute und Listen in einem DataObject erforderlich ist. Beispielsweise ist der JSTL-Ausdruck
${rootDO.CUSTOMER[index].CUSTNAME}
bezogen auf ein DataObject rootCustomer zum Java™-Code für das folgende DataObject äquivalent:
rootDO.getList("CUSTOMER").get(index).get("CUSTNAME")
Dies liegt daran, dass die Schreibweise mit Punkt im JSTL-Ausdruck mit einer getter()-Methode im Java-Code korreliert und über die Schreibweise mit eckigen Klammern auf Einträge einer Liste zugegriffen werden kann.
JDBC DMS und JSF ergänzen sich gut, denn der vom JDBC DMS erzeugte DataGraph kann ohne Umwandlung eine JSF-UIData-Komponente mit Daten füllen. Die UIData-Komponente verwendet ein Tag dataTable, dessen Eingabe eine Liste zum Füllen der Tabelle ist. Auch hier ergänzen sich die Komponente und der DataGraph gut, denn Sie müssen nur die Stammliste des DataGraph an die dataTable übergeben. Meistens wird der DataGraph in der dataTable dargestellt, indem jedes DataObject-Attribut aus der Liste, die aus dem Stammverzeichnis abgerufen wurde, in einer eigenen Spalte angezeigt wird und jede weitere Beziehung zum DataObject in eine neue dataTable aufgenommen wird, die in der Zeile des übergeordneten DataObject enthalten ist. Wenn Sie an Stelle einer herkömmlichen ResultSet-Tabelle diese Methode verwenden, vermeiden Sie das Duplizieren von Informationen und können die Trennung von über- und untergeordneten Objekten besser erkennen. Die Darstellung des Szenarios "Kunde und Bestellung (Customer and Order)" in einer dataTable finden Sie im Artikel "Beispiel: JavaServer Faces und JDBC Mediator dataTables verwenden".
Beispiel: JavaServer Faces und JDBC Mediator dataTables verwenden.
Dieses Beispiel enthält Code für eine Faces-JSP-Seite. Es veranschaulicht, wie JavaServer Faces und JDBC Mediator dataTables in einer Anwendung verwendet werden.
Es enthält das dataTable-Tag der UIData-Komponente mit allen Kundeninformationen und deren Bestellungen. Für jedes Kundenattribut (Customer) gibt es eine eigene Spalte. Die Kundenbestellungen (Customer Orders) sind ein eine weitere dataTable eingebettet, die alle Bestellattribute (Order) in gesonderten Spalten enthält. Diese eingebettete dataTable mit den Bestellungen hat wie jedes andere Kundenattribut (Customer) in der Kundenzeile (Customer) eine eigene Spalte.
<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>