java - POST REDIRECT GET 如何在 JSF 中的 commandButton 上工作

标签 java jsf jsf-2

我在测试 JSF 的几个新功能时遇到了 Post Redirect Get。 我想从第一页重定向到 second.xhtml。

我在两个托管 bean 中都有一个数字作为属性,我想使用请求参数将它从第一个 bean 传递到第二个 bean。

这是我的第一页

        <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core">


        <head>
            <title>Landing Page</title>
        </head>

        <body>
        <h3>Enter Number</h3>
        <h:form>
            <h:inputText id="input" name="number" value="#{postRedirectGet.number}" />
            <h:commandButton value="redirect to result" 
    action="resultPage?faces-redirect=true&amp;includeViewParams=true">
            </h:commandButton>
        </h:form>
        </body>
        </html>

在第二页我有

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<f:metadata>
    <f:viewParam name="number" value="#{postRedirectResult.number}"/>
</f:metadata> 

<head>
    <title>Result Page</title>
</head>

<body>
<h:form>
    <h:outputText value="Number #{postRedirectGet.number}" />
    <h:outputText value="Number #{postRedirectResult.number}" />
    <h:commandButton value="Redirect to index" action="/index?faces-redirect=true" />
</h:form>
</body>
</html>

现在该页面正在使用 commandButton 执行 POST,然后从第一页重定向到第二页,但它在 URL 中传递了 number=0。如果我改变它会起作用

<f:viewParam name="number" value="#{postRedirectResult.number}"/>

<f:viewParam name="number" value="#{postRedirectGet.number}"/>

但我认为 viewParam 用于将值设置为 bean 而不是用于传递 URL 中的值。有人可以解释一下我们如何进行 POST 并在下一页设置托管 bean 的属性。

问题在于 f:viewParam 在两种情况下以两种不同的方式使用。在 h:link 中,它用于设置目标 bean 的属性,在 h:commandButton 中,它用于计算 GET URL,然后可以使用 @ManagedProperty< 设置目标 bean 属性 。我的理解是否正确,或者 f:viewParam 是否也可用于设置 h:commandButton POST 重定向中的属性。

最佳答案

您似乎缺少的是 includeViewParams 的作用。让我引用this内容丰富的文章(您应该阅读所有文章):

The other special query string parameter, includeViewParams, tells the navigation handler to include the view parameters when performing the navigation. But what view parameters should be included? The view parameters to be included when performing the navigation are declared on the to-view-id page.

因此 JSF 查看您的 resultpage.xhtml 以确定要传递哪些参数。然后尽职尽责地传递 postRedirectResult#number 的当前值(此时未设置/0)。

要在您的 bean 中反射(reflect) GET number 参数,请将其作为真实参数传递:

<h:commandButton value="redirect to result" 
        action="resultPage?faces-redirect=true&amp;number=4" />

另见:

关于java - POST REDIRECT GET 如何在 JSF 中的 commandButton 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936733/

相关文章:

css - 在 primefaces 数据表列中居中输出文本

jsf-2 - PrimeFaces 计划日期错误

java - 找不到 WebApplicationContext : no ContextLoaderListener registered?

IDS 的 Java 应用程序设计

java - Jerry doc.$ getelementsbyclassname

java - Android Google Maps Api v2 fragment : NullPointerException error

java - 什么是莫哈拉?

java - JTextArea.getText() 没有返回它应该返回的内容(SWING)

css - 如何在 CSS 选择器中使用 JSF 生成的带有冒号 ":"的 HTML 元素 ID?

java - Spring + JSF - 从数据库检索图像并在浏览器中显示