RequestScope下未传递值

时间:2012-11-02 10:29:47

标签: jsf-2

我在下面的页面和&各自的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'值。

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

1 个答案:

答案 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