1

当我们对页面的特定部分执行任何重新渲染操作时。页面的显示很好,但是为了显示特定部分,剩余的页面操作被称为两次,并且这些 BackingBeans 中的查询正在触发(意思是说所有查询都被触发两次以显示页面的某些部分)。这会降低应用程序性能。关于如何通过使用 reRender 来提高性能以及我们如何减少查询执行次数的任何帮助?

4

4 回答 4

1

JSF getter 方法不保证只被调用一次。您应该在从构造函数调用的方法中进行查询以避免这种情况。

public class Test {
    private String value;

    public Test() {
       this.doQuery();
    }

    private void doQuery() {
       //do query
       this.value = "query result";
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
于 2009-09-04T14:02:58.820 回答
0

您有任何 Seam 页面操作吗?每个 Ajax 请求都会调用这些(烦人)。

于 2009-09-03T23:57:40.193 回答
0

这是一个已知的错误。没有变通方法,除了仅在需要时通过在需要的表单中设置自定义布尔值(让我们称之为 queryData)来查询数据。

爪哇:

    public String getValue() {
    if (queryData) {
        return doQuery();
    } else {
        return cachedValue;
    }
}

xhtml:

<h:form onsubmit="this.firstChild.value=true;">
<h:inputHidden id="queryData" value="#{backing.queryData}"/>
于 2009-12-14T13:16:44.143 回答
0

你的代码在吸气剂中吗?JSF 不保证 getter 只被调用一次,因此不应将昂贵的代码放入 getter。

于 2009-08-29T07:28:18.777 回答