在使用 p:commandButton 导航时调用 f:viewAction 中的操作



home.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(); 但 p:commandButton 不会,即使 homeController.validate() 方法返回 'product' 并成功导航到 product.xhtml。

使用

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

我需要的是,为了能够在主页.xhtml页面按钮中使用更新、操作/操作监听器等属性,同时导航到 product.xhtml,应该能够在页面加载时在 f:metadata 下调用函数 productController.readProductGroup。

请指教。

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

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

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

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

public void validate() {
    // ...
    return "product?faces-redirect=true";
}

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


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

相关内容

  • 没有找到相关文章

最新更新