阻止 Ajax 刷新 URL 参数

Prevent Ajax refresh of URL parameters

我将 prettyfaces-3.4.2primefaces-7.0 一起使用,并且我想在我的 URL 中使用 bean 属性,如文档所示。

漂亮-config.xml

<url-mapping id="myUrl1">
    <pattern value="/#{myBean.param}" />
    <view-id value="/views/myView.xhtml" />
</url-mapping>

MyBean.java

@Named(value = "myBean")
@ViewScoped
public class myBean implements Serializable {
    private String param;
    private String str1;
    private String str2;

    public void loadStr1() {
        if (param.equals("new")) this.str1 = "new_value";
        else this.str1 = "default_value";
    }        

    // getters & setters

    public void setParam() {
        this.param = param;
        loadStr1();
    }
}

myView.xhtml

<h:form>
    <p:inputText value="#{myBean.str1}">
        <p:ajax />
    </p:inputText>

    <p:inputText value="#{myBean.str2}">
        <p:ajax />
    </p:inputText>
</h:form>

我的问题是,每次我更改输入的值都会触发新的 ajax 请求来更新我的 bean 属性(str1 & str2),它会再次触发我的 url 参数 (param) 的 setter 因为执行了新请求。

因此,每次发出 ajax 请求时它都会触发我的 loadStr1,重置我的 str1 值。

ajax 请求调用 url 参数的 setter 是正常行为吗?我可以阻止它吗?

PrettyFaces onPostBack <action> 的参数似乎可以完成工作。

<url-mapping id="myUrl1">
    <pattern value="/#{myBean.param}" />
    <view-id value="/views/myView.xhtml" />
    <action onPostback="false">#{myBean.loadStr1}</action>
</url-mapping>

然后我只是从 MyBean 中删除 loadStr1 的调用。

public void setParam() {
    this.param = param;
    /*loadStr1();*/
}