Poll component delivers poll event to server at fixed intervals, we use poll in adf as an alternative of ADS (Active Data Service), this is very simple example of pushing data to page at some fix interval.
Basically af:poll component push data to UI from server.
Reloading- 33th times-
Reloading- 40th times-
Basically af:poll component push data to UI from server.
- This example contains a page with an af:table binded to Department VO, and I have used a poll component to refresh table periodically.
- and defined pollListener on af:poll component that sends request to server in every 4 sec, and table get refreshed
- Other approach to actively push data is ADS, but af:poll is still in use , to refresh table i have written in poll listener
- See the jspx page source code-
- Run your application, and do changes from Database and see updated UI at every 4 sec. :-)
AppModuleAMImpl am = (AppModuleAMImpl)resolvElDC("AppModuleAMDataControl"); ViewObject vo = am.getDepartment1(); vo.executeQuery(); i = i + 1; this.refreshInfo = "Data Reloaded-" + i+" Total Row-->"+vo.getRowCount(); AdfFacesContext.getCurrentInstance().addPartialTarget(refrshMsgBind);
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document title="activePushing.jspx" id="d1"> <af:messages id="m1"/> <af:form id="f1"> <af:panelBox id="pb1" showDisclosure="false" text="Active Data Pushing"> <f:facet name="toolbar"> <af:activeOutputText value="#{ActiveDataPushing.refreshInfo}" id="aot1" inlineStyle="font-weight:bold;color:red;" binding="#{ActiveDataPushing.refrshMsgBind}"/> </f:facet> <af:table value="#{bindings.Department1.collectionModel}" var="row" rows="#{bindings.Department1.rangeSize}" emptyText="#{bindings.Department1.viewable ? 'No data to display.' : 'Access Denied.'}" fetchSize="#{bindings.Department1.rangeSize}" rowBandingInterval="1" selectedRowKeys="#{bindings.Department1.collectionModel.selectedRow}" selectionListener="#{bindings.Department1.collectionModel.makeCurrent}" rowSelection="single" id="t1" styleClass="AFStretchWidth" contentDelivery="immediate"> <af:column sortProperty="#{bindings.Department1.hints.DepartmentId.name}" sortable="true" headerText="#{bindings.Department1.hints.DepartmentId.label}" id="c1" width="103"> <af:inputText value="#{row.bindings.DepartmentId.inputValue}" label="#{bindings.Department1.hints.DepartmentId.label}" required="#{bindings.Department1.hints.DepartmentId.mandatory}" columns="#{bindings.Department1.hints.DepartmentId.displayWidth}" maximumLength="#{bindings.Department1.hints.DepartmentId.precision}" shortDesc="#{bindings.Department1.hints.DepartmentId.tooltip}" id="it1" readOnly="true"> <f:validator binding="#{row.bindings.DepartmentId.validator}"/> <af:convertNumber groupingUsed="false" pattern="#{bindings.Department1.hints.DepartmentId.format}"/> </af:inputText> </af:column> <af:column sortProperty="#{bindings.Department1.hints.DepartmentName.name}" sortable="true" headerText="#{bindings.Department1.hints.DepartmentName.label}" id="c2" width="107"> <af:inputText value="#{row.bindings.DepartmentName.inputValue}" label="#{bindings.Department1.hints.DepartmentName.label}" required="#{bindings.Department1.hints.DepartmentName.mandatory}" columns="#{bindings.Department1.hints.DepartmentName.displayWidth}" maximumLength="#{bindings.Department1.hints.DepartmentName.precision}" shortDesc="#{bindings.Department1.hints.DepartmentName.tooltip}" id="it2" readOnly="true"> <f:validator binding="#{row.bindings.DepartmentName.validator}"/> </af:inputText> </af:column> <af:column sortProperty="#{bindings.Department1.hints.ManagerId.name}" sortable="true" headerText="#{bindings.Department1.hints.ManagerId.label}" id="c3" width="105"> <af:inputText value="#{row.bindings.ManagerId.inputValue}" label="#{bindings.Department1.hints.ManagerId.label}" required="#{bindings.Department1.hints.ManagerId.mandatory}" columns="#{bindings.Department1.hints.ManagerId.displayWidth}" maximumLength="#{bindings.Department1.hints.ManagerId.precision}" shortDesc="#{bindings.Department1.hints.ManagerId.tooltip}" id="it3" readOnly="true"> <f:validator binding="#{row.bindings.ManagerId.validator}"/> <af:convertNumber groupingUsed="false" pattern="#{bindings.Department1.hints.ManagerId.format}"/> </af:inputText> </af:column> <af:column sortProperty="#{bindings.Department1.hints.LocationId.name}" sortable="true" headerText="#{bindings.Department1.hints.LocationId.label}" id="c4" width="105"> <af:inputText value="#{row.bindings.LocationId.inputValue}" label="#{bindings.Department1.hints.LocationId.label}" required="#{bindings.Department1.hints.LocationId.mandatory}" columns="#{bindings.Department1.hints.LocationId.displayWidth}" maximumLength="#{bindings.Department1.hints.LocationId.precision}" shortDesc="#{bindings.Department1.hints.LocationId.tooltip}" id="it4" readOnly="true"> <f:validator binding="#{row.bindings.LocationId.validator}"/> <af:convertNumber groupingUsed="false" pattern="#{bindings.Department1.hints.LocationId.format}"/> </af:inputText> </af:column> </af:table> <af:poll id="p1" pollListener="#{ActiveDataPushing.pollListenerActive}" interval="4000" timeout="5000"/> </af:panelBox> </af:form> </af:document> </f:view> </jsp:root>
Reloading- 33th times-
Reloading- 40th times-
- Sample ADF Application - Download
No comments :
Post a Comment