質問

私は私がコード化されたことJSF ViewHandlerWrapperで少し問題があります。これは、ほとんどの時間の罰金に動作しますが、時々私はクロサギ科の非常にコアからNullPointerExceptionが取得されますので、私は正しく私のViewHandlerWrapperを実施しているか不思議に開始します。

public class TokenViewHandler extends ViewHandlerWrapper {
    private ViewHandler parent;

    public TokenViewHandler(ViewHandler parent) {
        this.parent = parent;
    }

    @Override
    public ViewHandler getWrapped() {
        return parent;
    }

    @Override
    public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException {
        final String token = UUID.randomUUID().toString();

        findAndModifyForms(viewToRender, token, context);

        getWrapped().renderView(context, viewToRender);
    }

    private void findAndModifyForms(final UIComponent component, final String token, final FacesContext ctx) {
        if (component instanceof UIForm) {
            final HtmlInputHidden hidden = (HtmlInputHidden) ctx.getApplication().createComponent(HtmlInputHidden.COMPONENT_TYPE);
            hidden.setValue(token);
            component.getChildren().add(hidden);
        } else {
            for (UIComponent tempComponent : component.getChildren()) {
                findAndModifyForms(tempComponent, token, ctx);
            }
        }
    }
}

コードから、あなたはすぐに、私はそれぞれのフォームビューでのへのUUID値との inputHidden の-componentを追加したいことを実現します。

私はそれがExceptionHandlerWrapperのように見えるが、私は時折NPEを取得するので、私のViewHandlerを使用しなければならないことを前提とViewHandlerWrappersのための任意の良い例を発見していないとして、私は何かが間違っていると仮定し、私はそれを見るように見えることはできません。

役に立ちましたか?

解決

これは部分的な状態保存のバグに関連すると思われるが、参照 1414

(一時的に)固定

はICEfacesをみんな同様の問題を発生し、彼らはそれを得ました次の行を追加します:

facesContext.getViewRoot().addComponentResource(facesContext, new UIOutput(), "head");

それを試してみます。ビューをレンダリングする前にそれをします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top