0

我有下面的一组页面和相应的 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()+"]);
  }

}

现在的问题是,它在提交期间显示“空”值。

有人可以建议吗?如果在提交期间无法获取模式值,请告诉我替代解决方案。请注意,模式值会显示在会话范围下。

4

1 回答 1

0

用于在preRenderView渲染视图之前运行一些自定义代码,然后再显示视图的其余部分(可能显示在 preRenderView 中计算的值)。其余的遵循标准范围基础。您的托管 bean 是RequestScope,因此 preProcess 将 设置mode为 1 ,然后就是这样。当您单击提交时,它成为一个新请求,因此mode为空。更改为ViewScoped(或更高范围)以保留preRenderView.

这是输出(我添加了生命周期阶段输出):

RequestScoped:
INFO:在 RESTORE_VIEW 1
阶段之前 INFO:在 RESTORE_VIEW 1 阶段之后
信息:在 RENDER_RESPONSE 6 阶段之前
信息:在预处理期间的模式 [1]
信息:在预处理期间的模式 [1]
信息:在 RENDER_RESPONSE 6 阶段之后
信息:在 RENDER_RESPONSE 6 阶段之后
//按“继续”
INFO:在 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 阶段之前
信息:预处理期间的模式 [1]
信息:预处理期间的模式 [1]
信息:预处理期间的模式 [1]
信息:RENDER_RESPONSE 6 阶段之后

ViewScoped:

INFO:在 RESTORE_VIEW阶段之前 1
INFO:在 RESTORE_VIEW 阶段之后 1
INFO:在阶段之前 RENDER_RESPONSE 6
INFO:在预处理期间的模式 [1]
INFO:在预处理期间的模式 [1]
INFO:在阶段之后 RENDER_RESPONSE 6
//按“继续”
INFO:在阶段之前RESTORE_VIEW 1
INFO:在 RESTORE_VIEW 阶段之后 1
INFO:在 APPLY_REQUEST_VALUES 阶段之前 2
INFO:在 APPLY_REQUEST_VALUES 阶段之后 2
INFO:在 PROCESS_VALIDATIONS 阶段之前 3
INFO:在 PROCESS_VALIDATIONS 阶段之后 3
INFO:在 UPDATE_MODEL_VALUES 阶段之前 4
INFO:在 UPDATE_MODEL_VALUES 阶段之后 4
信息:在 INVOKE_APPLIC 阶段之前
信息:提交期间的模式 [1]
信息:INVOKE_APPLICATION 5 阶段之后
信息:RENDER_RESPONSE 6 阶段之前
信息:预处理期间的模式 [1]
信息:预处理期间的模式 [1]
信息:预处理期间的模式 [1]
信息:RENDER_RESPONSE 6 阶段之后

于 2012-11-05T07:40:15.663 回答