简体   繁体   中英

Prevent Ajax refresh of URL parameters

I am using prettyfaces-3.4.2 with primefaces-7.0 and I wanted to use a bean property in my URL as the documentation show it.

pretty-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>

My problem is that each time I change the value of my inputs which trigger a new ajax request to update my bean properties ( str1 & str2 ), it triggers again the setter of my url parameter ( param ) because a new request is executed.

So, it triggers my loadStr1 each time an ajax request is made, resetting my str1 value.

Is it the normal behavior that ajax requests call setter of url parameter? And can I prevent it?

PrettyFaces onPostBack parameter of <action> seems to do the job.

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

And then I just remove the call of loadStr1 from MyBean .

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM