【问题标题】:JSF ViewParam Required +AJAX breaks pageJSF ViewParam 必需 +AJAX 中断页面
【发布时间】:2012-12-11 04:36:28
【问题描述】:

当我单击下面页面上的命令按钮时,导航失败。 (点击按钮刷新页面,移除 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>

【问题讨论】:

    标签: ajax jsf jsf-2 viewparams


    【解决方案1】:

    我会假设 update="form" 是粗心的过度简化,而您实际上打算使用 render="@form" 并将其与 PrimeFaces 混淆。

    回到具体问题,这是由执行非 ajax 回发引起的,该回发也会触发视图参数的处理。

    要么只在非回发时才需要它(但要确保 bean 是视图范围的),

    <f:viewParam ... required="#{not facesContext.postback}" />
    

    或者在回发时也传递它

    <h:commandButton ...>
        <f:param name="product" value="#{bean.product}" />
    </h:commandButton>
    

    如果您已经在使用视图范围的 bean,请改用 OmniFaces &lt;o:viewParam&gt;。它不会处理回发时的视图参数。

    <... xmlns:o="http://omnifaces.org/ui">
    ...
    <o:viewParam ... />
    

    【讨论】:

    • 我发现第一个选项仍然会导致我的实际页面出现问题,这有点复杂。
    猜你喜欢
    • 2012-09-02
    • 2020-02-20
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多