对于那些还没有听说过的人,ADF是基于JSF(Java Server Faces)的Java EE技术。 它通过新组件,更独立的生命周期,业务模型层和许多其他改进来升级JSF的功能。 我将描述如何使用动态数据创建弹出窗口,这些动态数据会根据用户交互而变化。
建议在ADF中以声明性的方式处理大多数工作,这是正确的ADF方式。 在我们的示例中,我们将使用此精确方法,这意味着我们将以声明方式进行所有操作。
为了说明这种方法,我们将使用一个名为Employee的自定义POJO,它将保存公司中给定员工的所有信息,例如名字,姓氏,生日和薪水。 我们的应用程序将列出所有可用的雇员,对于每个雇员,我们可以在详细信息弹出窗口中查看更多详细信息。
对于页面,我正在使用不基于页面片段的全新任务流, empListBean
在页面流范围empListBean
托管bean注册为empListBean
。 这个bean将提供一个雇员集合,仅用于提供数据。 在您的实际情况中,可以使用来自数据库或WS的对象来更改它-这取决于情况。 例如,将创建员工并将其保留在Map集合的bean中,其中键是员工的ID。
我们已经在桌子上可视化了员工–这里没什么花哨的:
<af:table var="emp" rowBandingInterval="0" id="t1"
value="#{pageFlowScope.empListBean.employeesOnly}">
<af:column sortable="false" headerText="First Name" id="c1" align="center">
<af:outputText value="#{emp.firstName}" id="ot1"/>
</af:column>
<af:column sortable="false" headerText="Last Name" id="c2" align="center">
<af:outputText value="#{emp.lastName}" id="ot2"/>
</af:column>
<af:column sortable="false" id="c5" align="center">
<af:button text="Details" id="cb1">
<af:clientAttribute name="selectedId" value="#{emp.idCode}"/>
<af:showPopupBehavior popupId=":empDetails" triggerType="click"/>
</af:button>
</af:column>
</af:table>
这里的关键点是,在按钮组件中,我们添加了一个属性标签来保存当前员工的ID CODE。 并且我们已经使用了声明式方法通过showPopupBehavior
标记在页面上调用弹出窗口。
现在是弹出部分。 这并不难,这是它的外观:
<af:popup id="empDetails" launcherVar="source" eventContext="launcher"
contentDelivery="lazyUncached">
<af:setPropertyListener type="popupFetch"
from="#{source.attributes.selectedId}" to="#{viewScope.id}"/>
<af:dialog type="ok" title="Employee Details" id="d2">
<af:panelFormLayout maxColumns="1" id="pfl1">
<af:panelLabelAndMessage label="Birth date" id="plam1">
<af:outputText id="ot3"
value="#{pageFlowScope.empListBean.employees[viewScope.id].birthDate}">
<f:convertDateTime pattern=""/>
</af:outputText>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage label="Salary" id="plam2">
<af:outputText id="ot4"
value="#{pageFlowScope.empListBean.employees[viewScope.id].salary}"/>
</af:panelLabelAndMessage>
</af:panelFormLayout>
</af:dialog>
</af:popup>
在此检查两个标签及其属性很重要:
<af:popup id="empDetails" launcherVar="source" eventContext="launcher"
contentDelivery="lazyUncached">
<af:setPropertyListener type="popupFetch"
from="#{source.attributes.selectedId}" to="#{viewScope.id}"/>
从弹出窗口中,我们声明已调用弹出窗口的组件以source
显示-在这里您可以指定适合您的名称。 对于事件上下文,我们选择ADF中预定义的launcher
器。
然后是setPropertyListener
,它将一个值从一个地方设置到另一个地方。 这里重要的是,此值是在popupFetch
上设置的,该值发生在用户实际看到数据之前。 我们的位置是source
组件的属性,我们在其中设置了员工的ID,并将其设置为名称为id
的视图范围,此名称以后可以在表达式语言中引用。 我们使用id
从empListBean
bean中的Map中获取正确的员工,然后显示此人的其他信息。
为了创建此示例项目,我使用了Oracle JDeveloper Studio 12c,这是开发ADF应用程序时推荐的IDE。 可以从Oracle免费下载。
翻译自: https://jaxenter.com/dynamic-pop-up-content-in-adf-120946.html