我想显示一个呈现“组”实体列表的页面,所以我的页面(xhtml)中有这个
<f:event type="preRenderView" listener="#{groupController.loadGroups}" />
这是在页面加载时调用的,昨天它按预期返回了一个列表。该方法看起来像这样
public void loadGroups() {
allGroups = groupDao.findAll();
}
现在我添加了一个表单来保存一个新组(在同一页面上)。当我保存该表单时,它会调用此方法:
public String save() {
groupDao.create(group);
return "/admin/groups?faces-redirect=true";
}
我已确认该组已保存在数据库中。但是,我期待“return”语句重新加载页面,就像第一次进入它一样,调用“preRenderView”方法等等。
当它返回到页面时,它确实调用了该方法,但是正在使用数据列表来显示返回的组集合以及何时调用
public Collection<Group> getAllGroups() {
return allGroups;
}
...“allGroups”变量已重置为空。
我已经有几个月没有接触过 JSF 了,我想我曾经明白这一切,但我显然不明白。谁能给我一个线索我做错了什么?
如果我找到答案(现在把我的书挖出来)我会发布更新。不过谢谢。
更新:为了澄清,我认为 loadGroups 方法会在 getAllGroups 方法之前执行,因为它是一个 preRenderView 事件。但是它们似乎以错误的方式执行(首先调用 getAllGroups,在 loadGroups() 填充集合之前)。顺便说一下,它是一个 ViewScoped bean。