<f:viewParam> 根据第一个 AJAX 请求再次调用

<f:viewParam> called again on first AJAX request

我正在使用 JBoss Wildfly 8.2.0 并注意到 <f:viewParam> 在我的页面上被调用了两次:

豆子:

@Named
@javax.faces.view.ViewScoped
public class MessageBean implements Serializable {

    private String message;
    private int count;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        System.out.println("setting message");
        this.message = message;
    }

    public void increment() {
        this.count++;
    }

    public int getCount() {
        return count;
    }
}

XHTML:

<!DOCTYPE html ...>
<html ...>
    <f:metadata>
        <f:viewParam name="message" value="#{messageBean.message}" />
    </f:metadata>
    <h:head>
        <title>Message</title>
    </h:head>
    <h:body>
        <h:form>
            <h:outputText value="#{messageBean.message} (#{messageBean.count} time(s))" />
            <h:commandButton value="increment">
                <f:ajax render="@form" listener="#{messageBean.increment}" />
            </h:commandButton>
        </h:form>
    </h:body>
</html>

我不明白为什么 AJAX 请求会触发 <f:viewParam> 以及为什么只有第一个。

这是由 <f:viewParam>statefulness 引起的。

JSF 实用程序库 OmniFaces has solved this with its <o:viewParam>

另请参阅:

  • Process f:viewParam only on page load