DD.*_*DD. 5 ajax jsf jsf-2 viewparams
当我单击下面页面上的命令按钮时,导航失败.(单击该按钮刷新页面,删除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>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 13
我会假设这update="form"是一个粗心的过度简化,你实际上是想使用render="@form"和混淆它与PrimeFaces左右.
回到具体问题,这是由执行非ajax回发引起的,该回发也触发了视图参数的处理.
要么只在非回发上使它需要(确保bean是视图作用域),
<f:viewParam ... required="#{not facesContext.postback}" />
Run Code Online (Sandbox Code Playgroud)
或者也可以在回发时传递它
<h:commandButton ...>
<f:param name="product" value="#{bean.product}" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
或者如果您已经在使用视图范围的bean,请使用OmniFaces<o:viewParam>.它不会在回发上处理view参数.
<... xmlns:o="http://omnifaces.org/ui">
...
<o:viewParam ... />
Run Code Online (Sandbox Code Playgroud)