Oracle ADF开发:如何在JSFF页面添加Java实现的返回按钮
Oracle ADF 返回按钮的Java实现方案
嘿,同为ADF开发者,我太懂你为啥想要用Java实现返回按钮而不是依赖JavaScript了——ADF的页面生命周期和导航上下文经常让原生JS显得不太靠谱。下面给你两种适配JSFF页面的Java实现方案:
第一步:在JSFF页面添加按钮组件
先在你的JSFF里拖入一个按钮,绑定到后台Bean的处理方法:
<af:button text="返回上一页" id="btnBack" actionListener="#{backingBean.handleBackAction}"/>
方案一:基于ADF任务流(Task Flow)的导航返回
这种方案最贴合ADF的架构,适合有明确任务流跳转的场景(比如从页面A通过任务流导航到页面B,现在要回到A),能正确维护任务流的上下文和页面状态:
import oracle.adf.controller.ControllerContext; import oracle.adf.controller.TaskFlowContext; import javax.faces.event.ActionEvent; import javax.faces.context.FacesContext; public class BackingBean { public void handleBackAction(ActionEvent actionEvent) { // 获取ADF控制器上下文 ControllerContext controllerContext = ControllerContext.getInstance(); TaskFlowContext taskFlowContext = controllerContext.getTaskFlowContext(); // 直接返回上一个任务流节点,自动匹配之前的导航路径 taskFlowContext.returnTaskFlowResult(); // 如果你需要跳转到指定的视图页面(比如明确知道上一页的视图ID),可以替换成下面的代码: // 需要先在faces-config.xml里配置对应的导航规则(比如"goToPreviousPage"对应的目标视图) // controllerContext.getNavigationHandler().handleNavigation( // FacesContext.getCurrentInstance(), null, "goToPreviousPage" // ); } }
方案二:模拟浏览器历史返回(Java触发)
如果不确定上一页的具体路径,只是想回到浏览器历史的前一页,可以用Java代码触发JS,但这种方式是通过ADF的上下文注入脚本,比直接在页面写JS更适配ADF的部分刷新场景:
import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; public class BackingBean { public void handleBackAction(ActionEvent actionEvent) { FacesContext facesContext = FacesContext.getCurrentInstance(); // 注入浏览器返回的脚本,由ADF统一处理执行时机 facesContext.getPartialViewContext().getEvalScripts().add("window.history.back();"); } }
注意事项
- 确保你的
BackingBean已经配置为ADF的Managed Bean,作用域建议选择viewScope或pageFlowScope,根据页面的导航场景来决定。 - 方案一更推荐在使用Task Flow的项目中使用,能更好地遵循ADF的导航规范;方案二适合无明确任务流的自由导航场景。
内容的提问来源于stack exchange,提问作者Roli
相关产品推荐
相关产品推荐

