發(fā)布于:2021-01-21 10:15:11
0
134
0
在這里,我們看一下如何使用javaee升級ADF來構(gòu)建一個彈出窗口系統(tǒng),該系統(tǒng)根據(jù)用戶的交互動態(tài)地做出反應(yīng)。
對于那些沒聽說過的人來說,ADF是一種基于JSF(javaserverfaces)的javaee技術(shù)。它用新的組件、更獨立的生命周期、業(yè)務(wù)模型層和許多其他改進(jìn)來升級JSF的特性。我將描述如何使用動態(tài)數(shù)據(jù)創(chuàng)建彈出窗口,這些數(shù)據(jù)會根據(jù)用戶交互進(jìn)行更改。
在ADF中,建議用聲明式的方式完成大部分工作,這是正確的ADF方式。在我們的示例中,我們將使用這個確切的方法,這意味著我們將以聲明的方式來做所有事情。
為了說明這個方法,我們將使用一個名為Employee的定制POJO,它將保存公司中給定員工的所有信息,比如名字、姓氏、出生日期和薪水。我們的應(yīng)用程序?qū)⒘谐鏊锌捎玫膯T工,我們可以在詳細(xì)信息彈出窗口中看到每個員工的詳細(xì)信息。
對于這個頁面,我使用的是全新的taskflow,而不是基于頁面片段,并且我在頁面流作用域中注冊了一個托管bean,名為empListBean
。這個bean將提供一個雇員集合,只用于提供數(shù)據(jù)。它可以在您的實際場景中使用來自DB或WS的對象進(jìn)行更改—這取決于具體情況。例如,雇員被創(chuàng)建并保存在映射集合的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>
這里的關(guān)鍵點是,在button組件中,我們添加了一個屬性標(biāo)記來保存當(dāng)前員工的ID代碼。我們使用聲明性的方式通過showPopupBehavior
標(biāo)記調(diào)用頁面上的彈出窗口。
現(xiàn)在是彈出部分。這不是什么難事,這是它看起來的樣子:
<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>
在此,檢查這兩個標(biāo)記及其屬性非常重要:
<af:popup id="empDetails" launcherVar="source" eventContext="launcher" contentDelivery="lazyUncached"> <af:setPropertyListener type="popupFetch" from="#{source.attributes.selectedId}" to="#{viewScope.id}"/>
從彈出窗口中,我們聲明調(diào)用彈出窗口以顯示為source
的組件—在這里您可以指定任何適合您的名稱。對于事件上下文,我們選擇ADF中預(yù)定義的launcher。
然后是setPropertyListener
,它將一些值從一個地方設(shè)置到另一個地方。這里最重要的一點是,這個值是在用戶實際看到數(shù)據(jù)之前設(shè)置的。我們的from place是source
組件的屬性,在這里我們設(shè)置了雇員的ID,并將其設(shè)置為id
名稱下的視圖范圍,該名稱稍后可以在表達(dá)式語言中引用。我們使用id
從empListBean
bean中的地圖中獲取正確的員工,然后顯示此人的附加信息。
為了創(chuàng)建這個示例項目,我使用了oraclejdeveloperstudio12c,這是開發(fā)ADF應(yīng)用程序時推薦的IDE。
作者介紹