【问题标题】:Confused about JSF Lifecycle对 JSF 生命周期感到困惑
【发布时间】:2012-09-04 21:24:07
【问题描述】:

我想显示一个呈现“组”实体列表的页面,所以我的页面 (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' 变量已重置为 null。

我已经有几个月没有接触 JSF 了,我想我曾经明白这一切,但我显然不明白。谁能给我一个线索我做错了什么?

如果我找到答案(现在把我的书挖出来),我会发布更新。不过还是谢谢。

更新:澄清一下,我认为 loadGroups 方法会在 getAllGroups 方法之前执行,因为它是一个 preRenderView 事件。但是它们似乎以错误的方式执行(首先调用 getAllGroups,在 loadGroups() 填充集合之前)。顺便说一下,这是一个 ViewScoped bean。

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多