Java 在ADF中的弹出式焦点上设置会话变量

Java 在ADF中的弹出式焦点上设置会话变量,java,oracle-adf,Java,Oracle Adf,我有一个应用程序,有点沉重的ADF弹出对话框。它们将在索引页中定义如下: <af:popup id="popup1" contentDelivery="lazyUncached" binding="managedBean1"> <jsp:include page="page1.jsp" /> </af:popup> <af:popup id="popup2" contentDelivery="lazyUncached" binding="mana

我有一个应用程序,有点沉重的ADF弹出对话框。它们将在索引页中定义如下:

<af:popup id="popup1" contentDelivery="lazyUncached" binding="managedBean1">
    <jsp:include page="page1.jsp" />
</af:popup>
<af:popup id="popup2" contentDelivery="lazyUncached" binding="managedBean1">
    <jsp:include page="page2.jsp" />
</af:popup>

etc, etc.

等等等等。
我想做的是,每当弹出窗口打开和/或接收到焦点时,我想设置一个名为“wheremi”的会话范围变量。此变量将用于进一步定制页面、上下文菜单等

有人能帮忙吗


Jason

弹出组件有一个PopupFetchListener事件。当弹出窗口显示时,将触发该事件。
在支持bean中捕获该方法,并在那里设置会话bean。

弹出组件有一个PopupFetchListener事件。当弹出窗口显示时,将触发该事件。
在支持bean中捕获该方法,并在那里设置会话bean。

您可以使用JavaScript将click事件附加到弹出窗口的主体或div上。这可以通过从PopupFetchListener的侦听器方法触发JavaScript从后端实现。作为:

ExtendedRenderKitService service = Service.getRenderKitService(FacesContext.getCurrentInstance(), ExtendedRenderKitService.class);
service.addScript(FacesContext.getCurrentInstance(), "yourmethod();");
然后,您可以按照以下任一方法进行操作

添加带有
actionListener
的commandButton,并将其隐藏。通过弹出窗口的onclick JavaScript方法,您可以通过以下方式触发该隐藏按钮的单击事件:

var button = AdfPage.PAGE.findComponentByAbsoluteId("hiddenButton");
ActionEvent.queue(button,true);
这将触发actionListener

或者您可以借助
af:serverListener
来调用backing方法


我没有测试它,但这应该可以工作。

您可以使用JavaScript将click事件附加到弹出窗口的主体或div上。这可以通过从PopupFetchListener的侦听器方法触发JavaScript从后端实现。作为:

ExtendedRenderKitService service = Service.getRenderKitService(FacesContext.getCurrentInstance(), ExtendedRenderKitService.class);
service.addScript(FacesContext.getCurrentInstance(), "yourmethod();");
然后,您可以按照以下任一方法进行操作

添加带有
actionListener
的commandButton,并将其隐藏。通过弹出窗口的onclick JavaScript方法,您可以通过以下方式触发该隐藏按钮的单击事件:

var button = AdfPage.PAGE.findComponentByAbsoluteId("hiddenButton");
ActionEvent.queue(button,true);
这将触发actionListener

或者您可以借助
af:serverListener
来调用backing方法


我没有测试它,但这应该可以工作。

我发现了,但它是在弹出窗口获得焦点时触发,还是仅在第一次显示弹出窗口时触发?在这个应用程序中,可能会出现重叠的弹出窗口,这可能会搞乱wheremi变量breadcrumbs组件不是一个选项。实际上,我发现答案似乎是“否”,PopupFetchListener只在初始加载时启动,而不是弹出焦点。我发现了,但它会在弹出窗口获得焦点时启动,还是仅在第一次显示弹出窗口时?在这个应用程序中,可能会出现重叠的弹出窗口,这可能会破坏wheremi变量breadcrumbs组件不是一个选项。实际上,我发现答案似乎是“否”,PopupFetchListener只在初始加载时启动,而不是在弹出焦点时启动。