我有下面的一组页面和各自的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‘值。
有没有人能提个建议?如果无法在提交过程中获得模式值,请让我知道替代解决方案。请注意,模式值显示在会话范围下。
发布于 2012-11-05 15:40:16
在呈现视图之前使用preRenderView,以便在显示视图的其余部分之前运行一些自定义代码(可能会显示在preRenderView中计算的值)。其余部分遵循标准作用域基础。您的托管bean是RequestScope,因此preProcess将mode设置为1,仅此而已。当您单击submit时,它将变成一个新请求,因此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之后
https://stackoverflow.com/questions/13193447
复制相似问题