JDBC 介体与表示层集成
JDBC 数据介体服务 (DMS) 可与 Web 应用程序表示层技术(如,JavaServer Pages 标准标记库 (JSTL) 和 JavaServer Faces (JSF))结合使用。
本次讨论主要以对 JavaServer Pages 标准标记库 (JSTL) 和 JavaServer Faces (JSF) 技术的常规理解为基础。特别是应该了解 JSF、UIData 组件和 JSF 动态 Web 应用程序的一般文件结构。要获取 JSF 和 JSTL 的简明概述,请参阅中“服务数据对象”下面的主题。
JDBC DMS 和 JSTL 能够很好地协同运行,这是因为 JSTL 访问代码与访问 DataObject 中的属性和列表必需的代码等价。例如,与根客户 DataObject 相关,JSTL 表达式:
${rootDO.CUSTOMER[index].CUSTNAME}
等价于 Java™ 代码的 DataObject:
rootDO.getList("CUSTOMER").get(index).get("CUSTNAME")
原因就是 JSTL 表达式语言中的点分表示法与 Java 代码中的 getter() 方法有关,而括号表示法允许您访问表内元素。
JDBC DMS 和 JSF 能够很好地结合,这是因为 JDBC DMS 产生的 Datagraph 能够填充 JSF UIData 组件而无需转换。UIData 组件使用 dataTable 标记,该标记将列表用作为其输入填充表。这对于 DataGraph 能够很好地运行,因为所有需要传递到 dataTable 的是 DataGraph 的根列表。为 dataTable 中的 DataGraph 布局的最常见方法是显示列表(从其自己的列的根中检索到)中的 DataObject 的每个属性,并且将每个附加关系嵌入到新 dataTable 中的 DataObject 中(包含在父 DataObject 的行中)。使用此方法(而不是传统的 ResultSet 表)来除去复制信息并使得更易于查看父对象的子代的分离。以下主题中显示了 Customer 和 Order 方案是如何布局到 dataTable 的示例:“示例:使用 JavaServer Faces 和 JDBC 介体数据表”。
示例:使用 JavaServer Faces 和 JDBC 介体数据表。
此示例显示应位于 Faces JSP 页内的代码。它说明如何在应用程序中使用 JavaServer Faces 和 JDBC 介体数据表。
它包含具有所有客户的信息以及他们的定购的 UIData 组件 dataTable 标记。每个 Customer 属性都有其自己的列。客户定购嵌入在包含不同列中每个 Order 属性的另一 dataTable 中。此嵌入的 dataTable 的 Order 与任何其他 Customer 属性类似,在每个 Customer 行中拥有它自己的列。
<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>