1

主页.xhtml

<p:button outcome="product" value="Login Simple Button"/>
<p:commandButton value="Login" action="#{homeController.validate}" update="logindialog"/>

产品.xhtml

<f:metadata> <f:viewAction action="#{productController.readProductGroup}" /> </f:metadata>

简单的 p:button 导航并成功调用 readProductGroup(); 但是即使 homeController.validate() 方法返回 'product' 并成功导航到 product.xhtml,p:commandButton 也不会。

使用 p:button,我无法灵活地调用服务器方法、使用我需要的更新属性等。

我需要的是,能够在 home.xhtml 页面按钮中使用更新、action/actionListener 等属性,同时在导航到 product.xhtml 时,应该能够调用 f 下的函数 productController.readProductGroup:页面加载时的元数据。

请建议。

4

1 回答 1

1

<f:viewAction>设计为在 GET 请求上运行,而不是在 POST 请求上运行。要对 POST 请求调用操作,您应该使用<h:commandXxx>.

如果您出于某种原因也确实想<f:viewAction>在 POST 请求上运行,那么只需将其onPostback属性设置为true.

<f:viewAction ... onPostback="true" />

另一方面,你也可能不太了解幂等性、导航和 GET 与 POST 的关系。通过 POST 导航被认为是不好的做法。?faces-redirect=true您可以通过将查询字符串附加到结果来发送重定向操作方法来应用 POST-redirect-GET 模式。

public void validate() {
    // ...

    return "product?faces-redirect=true";
}

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


与具体问题无关,操作方法名称给我留下的印象是您也没有意识到正确使用 JSF 验证器。在这种情况下,请仔细阅读actionListener 或 action method 中的 JSF 2.0 验证

于 2016-03-04T09:48:44.223 回答