我正在编写我的arraylist的大小只是为了调试目的,但我注意到我在Eclipse的日志窗口中多次获取该值。它每次都不同,它适用于我使用System.out.println(..)调试的其他地方出现这种情况的原因是什么?
日志窗口
INFO: 4
INFO: 4
INFO: 4
INFO: 4
查看
<f:metadata>
<f:event listener="#{defaultNewQuestionHandler.init}" type="preRenderView" />
</f:metadata>
Backingbean
import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ViewScoped
@ManagedBean
public class DefaultNewQuestionHandler extends QuestionHandler implements Serializable {
private static final long serialVersionUID = -6986655384538762284L;
@Override
public void init() {
answers = new ArrayList<Answer>();
for (int i = 0; i < 4; i++) {
addAnswerAlternative();
}
System.out.println(answers.size());
}
}
答案 0 :(得分:1)
由于JSF的请求响应生命周期,您在日志中多次获得该值。初始请求导致4个日志条目,因为JSF执行还原视图,应用请求值,处理事件和渲染响应阶段。
答案 1 :(得分:0)
JSF倾向于不止一次调用辅助bean上的方法(如本Seam performance tips文章中所述)。计算结果通常是一个好主意,将其粘贴在一个字段中,并让JSF页面引用一个只返回字段值的方法。