当我单击下面页面上的命令按钮时,导航失败。(单击按钮将刷新页面,删除URL参数并显示所需的错误消息,而不是导航到索引页面)
但是,如果我删除了必需的属性,或者我删除了f:ajax标记,则导航工作正常。
使用com.sun.faces JSF 2.1.13和primefaces 3.4。
<!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head></h:head> <f:metadata> <f:viewParam name="product" required="true" requiredMessage="Bad request. Please use a link from within the system."/> </f:metadata> <body> <h:form id="form"> <h:selectBooleanCheckbox> <f:ajax update="form" /> </h:selectBooleanCheckbox> <h:commandButton value="buy" action="/index.xhtml?faces-redirect=true" /> </h:form> </body> </html>
我将假设,这update="form"是一个粗心的过分简化,并且您实际上打算将render="@form"其与PrimeFaces左右使用并混淆。
update="form"
render="@form"
回到具体的问题,这是由执行非ajax回发引起的,该回发也触发了视图参数的处理。
要么仅在非回发上使它成为必需(不过请确保该bean在视图作用域内),
<f:viewParam ... required="#{not facesContext.postback}" />
或也将其通过回发
<h:commandButton ...> <f:param name="product" value="#{bean.product}" /> </h:commandButton>
或者如果您已经在使用视图作用域的bean,请改用OmniFaces<o:viewParam>。它不会在回发时处理view参数。
<o:viewParam>
<... xmlns:o="http://omnifaces.org/ui"> ... <o:viewParam ... />