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:按钮,我无法灵活地调用服务器方法,使用我需要的更新属性等。
我需要的是,能够在home.xhtml页面按钮中使用update,action / actionListener等属性,同时导航到product.xhtml时,应该能够调用函数productController.readProductGroup在f:页面加载时的元数据。
请建议。
答案 0 :(得分:1)
<f:viewAction>
旨在运行GET请求,而不是POST请求。要调用POST请求的操作,您应该使用<h:commandXxx>
。
如果您真的想因某些原因在POST请求上运行<f:viewAction>
,那么只需将其onPostback
属性设置为true
。
<f:viewAction ... onPostback="true" />
另一方面,你也不太了解幂等性,导航和GET与POST的关系。通过POST导航被认为是不好的做法。您可以通过将?faces-redirect=true
查询字符串附加到结果来发送重定向操作方法来应用POST-redirect-GET模式。
public void validate() {
// ...
return "product?faces-redirect=true";
}
另见How to navigate in JSF? How to make URL reflect current page (and not previous one)
对具体问题无关,操作方法名称给我的印象是你也不知道正确使用JSF验证器。在这种情况下,请仔细阅读JSF 2.0 validation in actionListener or action method。