在 JSF 中使用 POST 请求导航到其他页面

Posted

技术标签:

【中文标题】在 JSF 中使用 POST 请求导航到其他页面【英文标题】:Navigate to other page using POST request in JSF 【发布时间】:2016-08-01 00:33:45 【问题描述】:

在 JSF 中,我正在执行如下 GET 请求:

<p:button value="Select Document" icon="fa fa-save" outcome="index">
    <f:param name="documento"
             value="#dIGRCController.digrc.selectedDigrc.documento" />
</p:button>

我不想在 URL 中显示该值,因此我尝试发出 POST 请求。我怎样才能做到这一点?

在我的项目中,我使用 PrimeFaces 5.3、JSF 2.2 和 OmniFaces 1.11。

【问题讨论】:

【参考方案1】:

使用commandButton 而不是button

您的 GET sn-p 的 POST 等效项如下:

<h:form>
    <p:commandButton value="Select Document" icon="fa fa-save" action="index">
        <f:param name="documento"
                 value="#dIGRCController.digrc.selectedDigrc.documento" />
    </p:commandButton>
</h:form>

您只需要记住,网址更改不会反映在地址栏中,并且目标页面不再可收藏。如果目标页面不是幂等的,这应该不是问题,但它看起来不是一个(“SELECT”始终是幂等的)。

另见:

Difference between h:button and h:commandButton How to navigate in JSF? How to make URL reflect current page (and not previous one) Creating master-detail pages for entities, how to link them and which bean scope to choose

【讨论】:

这有效,但是当我从 search.jsf 向 index.jsf 发出 POST 请求时,URL 未更新为 index.jsf。它保留为 search.jsf。我可以让它改变吗?另外,您能否解释一下页面幂等是什么意思?谢谢@BalusC 请参阅此衍生问题的第二和第三个“另请参阅”链接。 是的,刚看到哈哈。它使用 ?faces-redirect=true。谢谢楼主! 我希望您已经考虑过当最终用户将 URL 加入书签/复制粘贴/共享到不同的浏览器窗口甚至会话时,页面应该如何表现。

以上是关于在 JSF 中使用 POST 请求导航到其他页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 HTML 表单的情况下以编程方式将 POST 请求发送到 JSF 页面?

我可以在 JSF 导航规则中使用通配符 * 吗?

如何在 JSF 中导航?如何使 URL 反映当前页面(而不是上一个页面)

使用 JSF ajax 请求刷新 URL

JSF 页面导航:意外的 RuntimeException

如何在页面呈现期间测试是不是存在 JSF 导航案例