Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 对JSF生命周期感到困惑_Jsf 2 - Fatal编程技术网

Jsf 2 对JSF生命周期感到困惑

Jsf 2 对JSF生命周期感到困惑,jsf-2,Jsf 2,我想显示一个呈现“组”实体列表的页面,所以我的页面(xhtml)中有这个 <f:event type="preRenderView" listener="#{groupController.loadGroups}" /> 现在我添加了一个表单来保存一个新组(在同一页上)。当我保存该表单时,它调用此方法: public String save() { groupDao.create(group); return "/admin/groups?faces-redirec

我想显示一个呈现“组”实体列表的页面,所以我的页面(xhtml)中有这个

<f:event type="preRenderView" listener="#{groupController.loadGroups}" />
现在我添加了一个表单来保存一个新组(在同一页上)。当我保存该表单时,它调用此方法:

public String save() {
    groupDao.create(group);
    return "/admin/groups?faces-redirect=true";
}
我已确认该组已保存在数据库中。但是,我希望“return”语句重新加载页面,就像第一次输入页面一样,调用“preRenderView”方法等等

当它返回到页面时,它确实调用了该方法,但我使用一个数据列表来显示返回的组集合,以及何时调用

public Collection<Group> getAllGroups() {
    return allGroups;
}
公共集合getAllGroups(){ 返回所有组; } 。。。“allGroups”变量已重置回null

我已经有几个月没有接触过JSF了,我想我曾经理解过这一切,但我显然不理解。谁能告诉我我做错了什么

如果我找到了答案(现在就把我的书翻出来),我会发布更新。谢谢你


更新:为了澄清,我认为loadGroups方法将在getAllGroups方法之前执行,因为它是一个preRenderView事件。但它们的执行方式似乎不对(在loadGroups()填充集合之前,首先调用getAllGroups)。顺便说一句,它是一个ViewScope bean。

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

public Collection<Group> getAllGroups() {
    return allGroups;
}