当我们对页面的特定部分执行任何reRender操作时。显示页面很好,但是为了显示特定部分,剩余的页面操作被称为两次,并且那些BackingBeans中的查询正在激活(意思是说所有查询都会触发两次以显示页面的某些部分)。这降低了应用程序性能。有关如何通过使用reRender提高性能以及如何使查询执行次数减少的任何帮助吗?
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
您的代码是否在getter中? JSF并不保证只有一次调用getter这么昂贵的代码不应该进入getter。
答案 2 :(得分:0)
你有任何Seam页面动作吗?每次Ajax请求都会调用它们(烦人)。
答案 3 :(得分:0)
这是一个已知的错误。 没有变通方法,除了通过在需要的表单中设置自定义布尔值(让我们称之为queryData)时,只在显式需要时才查询数据。
的java:
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}"/>