سؤال

لدي مشكلة صغيرة مع JSF ViewHandlerWrapper التي قمت بترميزها. إنه يعمل بشكل جيد في معظم الأوقات ، لكن في بعض الأحيان سأحصل على nullpointerxception من جوهر Mojarra ، وبالتالي بدأت أتساءل عما إذا كنت قد قمت بتطبيق 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);
            }
        }
    }
}

من الرمز الذي تدرك بسرعة أنني أريد إضافة ملف inputhidden-مكون ذو قيمة uuid لكل منهما شكل على المنظر.

نظرًا لأنني لم أجد أي أمثلة جيدة لـ ViewHandlerWrappers ، فقد افترضت أنه يجب أن يبدو وكأنه استثناء HandlerWrapper ، لكن بما أنني أحصل على NPE العرضي باستخدام FiewHandler الخاص بي ، أفترض أن هناك خطأ ما ولا يمكنني رؤيته.

هل كانت مفيدة؟

المحلول

يبدو أن هذا مرتبط بوجود خلل في إنقاذ الحالة الجزئية ، انظر العدد 1414.

واجه اللاعبين Icefaces أ مشكلة مماثلة وحصلوا عليه (مؤقتًا) عن طريق إضافة السطر التالي:

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

جربها. افعل ذلك قبل تقديم العرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top