2

FaceletContext を取得できない JSF 2.0 プロジェクトがあります。

これが私のweb.xmlからのセットアップです:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
    <param-value>/index.xhtml</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.application.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

FacesContext は取得できますが、FaceletContext は取得できません。次のコード行に問題があります。

            FacesContext fctx = FacesContext.getCurrentInstance(); //works
    //FaceletContext f2ctx = (FaceletContext) fctx.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
    FaceletContext f2ctx = (FaceletContext) fctx.getELContext().getContext(FaceletContext.class);

誰でも手伝ってもらえますか?

アップデート:

上記は、私の全体的な目標からのスニペットでした: ダイアログを含む facelet ファイルをオンデマンドでロードし、それを親に追加して表示します。以下のコードは不完全ですが、私が何を得ているかを説明する必要があります。アプリは Primefaces ライブラリを使用するため、RequestContext オブジェクトを使用することに注意してください。

public void launch() {

    form.getChildren().clear();

    FacesContext fctx = FacesContext.getCurrentInstance();
    for (Object o: fctx.getAttributes().keySet()) {
        System.out.println(o.toString());
    }

    FaceletContext f2ctx = (FaceletContext) fctx.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
    //FaceletContext f2ctx = (FaceletContext) fctx.getELContext().getContext(FaceletContext.class);
    dialog = new Dialog();

    try {
        f2ctx.includeFacelet(dialog, "/WEB-INF/facelets/dialog/manager.xhtml");
        form.getChildren().add(dialog);
    } catch (IOException ex) {
        log.debug(ex.toString());
    }

    RequestContext.getCurrentInstance().update("mainPageCenterForm");
}
4

1 に答える 1

1

ビューが構築されるnull前にアクセスしようとしたときです。たとえば、beforePhaseofRESTORE_VIEWフェーズの間です。コード ロジックを再配置します。機能要件が何であり、正確にどこにアクセスしようとしているのかが明確ではないため、より適切な答えを出すことはできません.


具体的な問題とは関係ありませんが、部分的な状態の保存が無効になっている場合、javax.faces.FULL_STATE_SAVING_VIEW_IDSコンテキスト パラメータは無視されます。おそらくそれはあなたの意図ではありませんでしたか?この関連する回答も参照してくださいPARTIAL_STATE_SAVING を false に設定する必要がありますか?

于 2012-04-26T18:12:21.873 に答える