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()+"]);
  }

}

問題は、送信中に「null」値が表示されていることです。

誰か提案してもらえますか?送信中にモード値を取得できない場合は、別の解決策を教えてください。モード値はセッションスコープの下に表示されることに注意してください。

4

1 に答える 1

0

preRenderView、ビューをレンダリングする前に使用され、ビューの残りの部分を表示する前にカスタムコードを実行します(場合によってはpreRenderViewで計算された値を表示します)。残りは、標準スコープの基本に従います。管理対象BeanはRequestScopeであるため、preProcessはmodeを1に設定し、それで終わりです。[送信]をクリックすると、新しいリクエストになるため、modeはnullになります。の値を維持するには、に変更しViewScopedます(またはより高いスコープ)preRenderView

出力は次のとおりです(ライフサイクルフェーズの出力を追加しました)。

RequestScoped:
INFO:フェーズRESTORE_VIEW 1の前INFO:フェーズ
RESTORE_VIEW 1の後で
INFO:フェーズRENDER_RESPONSE 6の前INFO:前処理
中のMODE [1] INFO:前処理中の
MODE [1]
INFO:フェーズRENDER_RESPONSE 6の後
INFO:フェーズRENDER_RESPONSE6の後
//"を押します続行"
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 INFO:フェーズ後
情報:フェーズINVOKE_APPLICATION5の前
INFO:送信中のモード[null]
INFO:フェーズINVOKE_APPLICATION 5の後
INFO:フェーズRENDER_RESPONSE 6の前INFO:
preProcess中のMODE [1]
INFO:preProcess中のMODE [1]
INFO:preProcess中のMODE [1]
INFO:フェーズRENDER_RESPONSE6後

ViewScoped:

情報:フェーズRESTORE_VIEW 1の前情報:フェーズ
RESTORE_VIEW 1の後で
情報:フェーズRENDER_RESPONSE 6の前情報:前処理
中のモード[1]情報:前処理
中のモード[1]
情報:フェーズ後RENDER_RESPONSE 6
//「続行」を押し
ます情報:フェーズ前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_VALUE
情報:送信中のモード[1]
INFO:フェーズINVOKE_APPLICATION 5の後
INFO:フェーズRENDER_RESPONSE 6の前INFO:
preProcess中のMODE [1]
INFO:preProcess中のMODE [1]
INFO:preProcess中のMODE [1]
INFO:フェーズRENDER_RESPONSE6の後

于 2012-11-05T07:40:15.663 に答える