我在下面的页面和&各自的MPB和我组织如下。
1)
class ManagedBeanBase {
protected String mode;
}
2)page1.xhtml
<ui:composition>
<ui:define name="contentArea">
<f:metadata>
<f:event type="preRenderView" listener="#{page1MPB.preProcess}" />
</f:metadata>
...
...
<h:panelGrid>
<h:panelGroup>
<h:commandButton value="continue" id="button_continue"
actionListener="#{page1MPB.postProcess}" />
</h:panelGroup>
</h:panelGrid>
</ui:define>
</ui:composition>
3)
@RequestScoped
@ManagedBean(name="page1MPB")
Page1MPB extends ManagedBeanBase
{
public void preProcess() {setMode("1");}
public void postProcess(ActionEvent event) {
System.out.println("MODE during submit ["+getMode()+"]);
}
}
现在的问题是,它在提交期间显示'null'值。
有人可以提出建议吗?如果在提交期间无法获得模式值,请告诉我替代解决方案。请注意,模式值将显示在会话范围内。
答案 0 :(得分:0)
在显示视图的其余部分之前渲染视图以运行某些自定义代码(可能显示在preRenderView中计算的值)之前使用preRenderView
。其余的遵循标准范围基础。
您的托管bean是RequestScope
,因此preProcess将mode
设置为1然后就是它。
单击“提交”时,它将成为新请求,因此mode
为空。更改为ViewScoped
(或更高的范围)以保留preRenderView
。
这是输出(我添加了生命周期阶段输出):
RequestScoped:
信息:在阶段之前RESTORE_VIEW 1
信息:阶段后RESTORE_VIEW 1
信息:阶段之前RENDER_RESPONSE 6
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
信息:阶段RENDER_RESPONSE 6
信息:阶段RENDER_RESPONSE 6
//按“继续”
信息:在阶段之前RESTORE_VIEW 1
信息:阶段后RESTORE_VIEW 1
信息:阶段之前APPLY_REQUEST_VALUES 2
信息:阶段后APPLY_REQUEST_VALUES 2
信息:阶段之前PROCESS_VALIDATIONS 3
信息:阶段后PROCESS_VALIDATIONS 3
信息:在阶段之前UPDATE_MODEL_VALUES 4
信息:阶段UPDATE_MODEL_VALUES 4
信息:阶段INVOKE_APPLICATION 5
信息:提交时的模式[null]
信息:阶段INVOKE_APPLICATION 5
信息:阶段之前RENDER_RESPONSE 6
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
信息:阶段RENDER_RESPONSE 6
ViewScoped:
信息:在阶段之前RESTORE_VIEW 1
信息:阶段后RESTORE_VIEW 1
信息:阶段之前RENDER_RESPONSE 6
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
信息:阶段RENDER_RESPONSE 6
//按“继续”
信息:在阶段之前RESTORE_VIEW 1
信息:阶段后RESTORE_VIEW 1
信息:阶段之前APPLY_REQUEST_VALUES 2
信息:阶段后APPLY_REQUEST_VALUES 2
信息:阶段之前PROCESS_VALIDATIONS 3
信息:阶段后PROCESS_VALIDATIONS 3
信息:在阶段之前UPDATE_MODEL_VALUES 4
信息:阶段UPDATE_MODEL_VALUES 4
信息:阶段INVOKE_APPLICATION 5
信息:提交期间的模式[1]
信息:阶段INVOKE_APPLICATION 5
信息:阶段之前RENDER_RESPONSE 6
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
INFO:preProcess [1] 期间的模式
信息:阶段RENDER_RESPONSE 6