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

Jsf 使用p:commandButton导航时在f:viewAction中调用操作,jsf,primefaces,postback,viewaction,Jsf,Primefaces,Postback,Viewaction,home.xhtml <p:button outcome="product" value="Login Simple Button"/> <p:commandButton value="Login" action="#{homeController.validate}" update="logindialog"/> product.xhtml <f:metadata> <f:viewAction action="#{productControlle

home.xhtml

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

product.xhtml

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

简单p:按钮导航并成功调用readProductGroup();但是p:commandButton即使homeController.validate()方法返回“product”并成功导航到product.xhtml,也不会这样做

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

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

请建议。

设计用于GET请求,而不是POST请求。要对POST请求调用操作,您应该使用

如果出于某种原因,您确实想对POST请求运行
,那么只需将其
onPostback
属性设置为
true

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



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

在提供的链接中有很多很棒的材料。product?faces redirect=true解决了问题。非常感谢分享所有这些细节。没有得到任何错误,只是没有调用我想要调用的方法。根据以下建议,使用的产品?faces redirect=true并使其正常工作。
public void validate() {
    // ...

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