0

我想显示一个呈现“组”实体列表的页面,所以我的页面(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。

4

1 回答 1

0

我不确定为什么我的原始版本不起作用,但如果我去掉页面中的 preRenderView 语句,并在 loadGroups 方法上添加 @PostConstruct 注释,它就可以正常工作。我明白为什么 @PostConstruct 方法会起作用,但不明白为什么 preRenderView 不起作用。无论如何,如果我这样做,它的工作...

于 2012-09-04T22:21:00.817 回答