【问题标题】:JSF NavigationHandler#handleNavigation + clear cacheJSF NavigationHandler#handleNavigation + 清除缓存
【发布时间】:2023-04-05 05:41:01
【问题描述】:

页面 xyz.xhtml 上的按钮确实调用了此代码(使用 ajax)。

FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nh = fc.getApplication().getNavigationHandler();
nh.handleNavigation(fc, null, "home");

home 指向 abc.xhtml。此页面包含一个应该刷新的表,但这不会发生。有什么想法吗?

如何在不使用自己的 JavaScript 的情况下刷新?我有一个使用 onload 属性和 JavaScript 的解决方法,它使用 ajax 重新加载表。但这确实“更平坦”的屏幕。这个解决方案并不复杂。

我正在使用 JSF 2、OpenFaces 3 和 IE8。

提前谢谢你!

【问题讨论】:

    标签: java jsf jakarta-ee jsf-2 openfaces


    【解决方案1】:

    我不明白你为什么要像这样摆弄导航处理程序。我不确定 OpenFaces 部分,因为我从未使用过它,所以这里只是一个基本的 JSF 2.x 方法,<f:ajax> 给出了实际应该如何完成的基本概念:

    <h:form>
        <h:commandButton value="refresh" action="#{bean.refresh}">
            <f:ajax render=":table" />
        </h:commandButton>
    </h:form>
    
    <h:dataTable id="table" value="#{bean.list}" var="item">
        ...
    </h:dataTable>
    

    public void refresh() {
        list = someService.list();
    }
    

    【讨论】:

    • 这也不是必需的。您只需要知道表的(客户端)ID 以及按钮操作会重新加载数据。
    • 即使不在同一页面上?我不知道。我会试试的。谢谢。 (我能够解决我的问题,这是我的代码中的一个小错误。)
    • JS/Ajax 完全在客户端的 HTML DOM 树上运行。它对服务器端视图模板的结构和组合方式一无所知。它所得到和看到的只是一棵大的 HTML DOM 树。这与您在浏览器中打开页面并右键单击并选择查看源代码时看到的完全相同。你看,它是同一个“文件”中的一个和所有 HTML。 ajax 客户端 ID 正是指那些 HTML 元素 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2017-04-06
    • 1970-01-01
    • 2016-04-09
    • 2015-03-10
    • 2011-02-20
    相关资源
    最近更新 更多