JSF运行在Servlet API之上,Servlet API在一个线程中提供一个请求,因此除非您自己引入更多线程,否则您可能希望您的代码在单个线程中运行。
另一方面,您应该了解JSF生命周期的基本知识,以及如何访问bean属性,因为如果您不理解它,这可能会给您带来很多麻烦。
例如,您的Java代码是否应该保持不变,向todaySchedule添加另一个引用。JSF的小时数将导致getter被调用两次,从而生成两次内容。这很快就会变得一团糟,所以进行一些“缓存”是一件好事。我个人使用这种方法:
private List<Hour> hours = null;
private void initHours() {
this.hours = new LinkedList<>();
// Fill hours here
}
public List<Hour> getHours() {
if (this.hours == null) {
initHours();
}
return this.hours;
}
但是,您必须小心在JSF生命周期的哪个阶段执行此操作。例如,如果在表单处理方法中更改了影响列表生成的数据,则列表可能已经从还原视图阶段“缓存”,并且在渲染视图阶段开始时不会反映更改。在这种情况下,您应该知道缓存,并在需要重新加载时清除列表。
public void saveHours() {
// Save the data, do whatever you need to do
// This will ensure re-initializing the list on the next call
this.hours = null;
}