最近,从UI角度来看,ADF Faces 表组件不再被认为很酷。 对于显示数据集合, 列表视图今天应该很酷。 这并不意味着我们根本不应该使用af:table 。 在某些情况下(经常是:)),表比列表视图更适合。 但是,列表视图组件看起来非常好,它非常适合现代UI趋势,并且绝对值得在ADF应用程序中广泛使用。
与数据收集有关的最常见用例之一是显示主从数据。 在这篇文章中,我将展示我们可以使用List View对此做些什么。
列表视图组件提供了开箱即用的功能,可以通过使用groupHeaderStamp构面来显示层次结构数据。
假设在应用程序中定义了Departments-Employees层次结构:
如果我们将详细信息集合“雇员”拖到页面上并选择“ ADF列表视图”作为所需组件,该向导将允许我们包括一个包含来自父集合的属性的组标题:
结果,页面上的列表视图将包含具有Department属性的groupHeaderStamp构面:
<af:listView value="#{bindings.Departments.treeModel}" var="item" ...fetchSize="#{bindings.Departments.rangeSize}" id="lv1"><af:listItem id="li1"><af:panelGridLayout id="pgl2"><af:gridRow marginTop="5px" height="auto" marginBottom="5px" id="gr1"><af:gridCell marginStart="5px" width="34%" id="gc1"><af:outputFormatted value="#{item.bindings.EmployeeId.inputValue}"id="of1"/></af:gridCell>...</af:panelGridLayout></af:listItem><f:facet name="groupHeaderStamp"><af:listItem id="li2"><af:outputFormatted value="#{item.bindings.DepartmentName.inputValue}"id="of6"/></af:listItem></f:facet>
</af:listView>
它看起来像这样:
看起来不错,但实际上并不是我所需要的! 我的要求是实现这样的事情:
因此,每个部门都有一个包含两个选项卡的面板来表示:常规部门信息和员工列表。 这个用例可以使用访问从树模型节点定义可以轻松实现。 页面def文件中的列表视图的树模型如下所示:
<tree IterBinding="DepartmentsIterator" id="Departments"><nodeDefinition DefName="DepartmentsDeafultVO" Name="Departments0"><AttrNames><Item Value="DepartmentId"/><Item Value="DepartmentName"/></AttrNames><Accessors><Item Value="Employees"/></Accessors></nodeDefinition><nodeDefinition DefName="EmployeesDeafultVO" Name="Departments1"><AttrNames><Item Value="EmployeeId"/><Item Value="FirstName"/><Item Value="LastName"/><Item Value="Email"/></AttrNames></nodeDefinition>
</tree>
在Departments0节点定义中定义了“ 雇员”访问者。 它使用员工 视图链接访问器来检索每个部门行的详细记录。 详细记录的结构在Departments1节点定义中描述。
我们将像这样使用这种分层树模型:
<af:listView value="#{bindings.Departments.treeModel}" var="item" ...> <af:listItem id="li1"><af:panelTabbed position="above" id="pt1" childCreation="lazyUncached"><af:showDetailItem id="tab1" text="Department"><af:panelFormLayout id="pfl1" inlineStyle="height:150px;"><af:panelLabelAndMessage label="#{item.bindings.DepartmentId.hints.label}"id="plam1"><af:inputText value="#{item.bindings.DepartmentId.inputValue}"id="ot1"/></af:panelLabelAndMessage>...</af:panelFormLayout></af:showDetailItem><af:showDetailItem id="sdi1" text="Employees"><af:listView value="#{item.Employees}" var="empItem" ...><af:listItem id="li2"><af:panelGridLayout id="pgl2"><af:gridRow id="gr1"><af:gridCell id="gc1"><af:outputFormatted value="#{empItem.bindings.EmployeeId.inputValue}"id="of1"/></af:gridCell>...</af:panelGridLayout></af:listItem></af:listView></af:showDetailItem></af:panelTabbed></af:listItem>
</af:listView>
因此,每个列表项都包含一个在内部标记的面板,而Employees选项卡则包含一个引用Employees访问器的嵌套 列表视图 (实际上,它可以是任何东西,例如一个表)。
- 此职位的示例应用程序可在此处获得 。
它需要JDeveloper 12.1.3。
而已!
翻译自: https://www.javacodegeeks.com/2015/12/master-detail-data-adf-list-view.html