在 Oracle ADF 中处理条件 dialog/popup 逻辑
Handling conditional dialog/popup logic in Oracle ADF
我有一个页面以编程方式在支持 bean 方法中显示弹出窗口。弹出窗口向用户询问 Yes/No 问题,随后的逻辑路径由他们的回答决定。但是,是否首先显示弹出窗口是有条件的。此外,在弹出逻辑之外的原始方法中还有必须完成的附加逻辑。
这个问题是 ADF 似乎将弹出窗口分拆到另一个线程,并在等待用户响应的同时继续同时执行原始方法中的逻辑。但是,所需的效果是程序暂停,直到用户回答了弹出窗口中的问题。
我还没想出一个优雅的方法来实现这一点。理想情况下,我认为解决方案是将弹出窗口显示(或不显示)后发生的逻辑封装在原始方法中,如果显示弹出窗口,则从弹出窗口的动作侦听器中调用它(否则从原始方法中调用) .但是,要封装的逻辑需要使用一些在显示弹出窗口之前设置的局部变量。无法将这些值获取到弹出窗口的动作侦听器方法,以便将它们传递给封装的逻辑(除了在 bean 中创建全局静态变量,这似乎是一个糟糕的解决方案)。
我的另一个想法是将 "show/don't show popup" 逻辑提升到任务流。但是,似乎对每个弹出窗口都执行此操作会使任务流程变得非常复杂。
有更好的方法吗?这一定是一个普遍的问题,看来我的做法全错了。
ETA:我尝试将弹出窗口的 ContentDelivery 属性 设置为 "immediate",并将弹出窗口中的 af:dialog 组件设置为 "true"。两者都没有产生所需的行为。
服务器端网络框架无法实现这一点。
对于 ADF,每个生命周期都有不同的事件:
1 - 弹出窗口打开 :: popupFetchListener 事件
2 - 单击“确定”、“取消”按钮 ::DialogListener 事件
3 - 按 Esc 按钮 :: popupCancelledEvent
您可以在 pageFlowScope 或 viewScope 上的这些事件之间共享数据。
但是,如果您使用 ADF BC,则最好在视图对象上使用瞬态属性。
我有一个页面以编程方式在支持 bean 方法中显示弹出窗口。弹出窗口向用户询问 Yes/No 问题,随后的逻辑路径由他们的回答决定。但是,是否首先显示弹出窗口是有条件的。此外,在弹出逻辑之外的原始方法中还有必须完成的附加逻辑。
这个问题是 ADF 似乎将弹出窗口分拆到另一个线程,并在等待用户响应的同时继续同时执行原始方法中的逻辑。但是,所需的效果是程序暂停,直到用户回答了弹出窗口中的问题。
我还没想出一个优雅的方法来实现这一点。理想情况下,我认为解决方案是将弹出窗口显示(或不显示)后发生的逻辑封装在原始方法中,如果显示弹出窗口,则从弹出窗口的动作侦听器中调用它(否则从原始方法中调用) .但是,要封装的逻辑需要使用一些在显示弹出窗口之前设置的局部变量。无法将这些值获取到弹出窗口的动作侦听器方法,以便将它们传递给封装的逻辑(除了在 bean 中创建全局静态变量,这似乎是一个糟糕的解决方案)。
我的另一个想法是将 "show/don't show popup" 逻辑提升到任务流。但是,似乎对每个弹出窗口都执行此操作会使任务流程变得非常复杂。
有更好的方法吗?这一定是一个普遍的问题,看来我的做法全错了。
ETA:我尝试将弹出窗口的 ContentDelivery 属性 设置为 "immediate",并将弹出窗口中的 af:dialog 组件设置为 "true"。两者都没有产生所需的行为。
服务器端网络框架无法实现这一点。
对于 ADF,每个生命周期都有不同的事件: 1 - 弹出窗口打开 :: popupFetchListener 事件 2 - 单击“确定”、“取消”按钮 ::DialogListener 事件 3 - 按 Esc 按钮 :: popupCancelledEvent
您可以在 pageFlowScope 或 viewScope 上的这些事件之间共享数据。 但是,如果您使用 ADF BC,则最好在视图对象上使用瞬态属性。