【问题标题】:Prevent Ajax refresh of URL parameters防止 Ajax 刷新 URL 参数
【发布时间】:2020-03-17 13:59:50
【问题描述】:

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

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>

我的问题是,每次我更改我的输入值时,它会触发一个新的 ajax 请求来更新我的 bean 属性(str1str2),它会再次触发我的 url 参数的设置器(param ) 因为执行了一个新请求。

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

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

【问题讨论】:

  • 您的代码中还有另一个问题:stackoverflow.com/q/513832
  • @BalusC 在构建我的问题的简单类似示例时犯了一个错误。

标签: jsf primefaces prettyfaces


【解决方案1】:

&lt;action&gt; 的 PrettyFaces onPostBack 参数似乎可以完成这项工作。

<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();*/
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2014-05-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多