سؤال

أبحث عن حل لاستبدال @ManagedBean(eager=true) شرح في JSF 2.2.

لقد أخذت علما جيدا بالمقترحات مثل والتي تسمح بتنفيذ التعليمات البرمجية عند بدء تشغيل التطبيق.

ومع ذلك فأنا بحاجة للوصول إلى FacesContext, ، لذلك هذا الحل لا يعمل: FacesContext.getCurrentInstance() لا يزال فارغا في هذا الوقت.

حاولت أن أجد بدائل ل AfterDeploymentValidation في SPI، ولكن لم يتم العثور على شيء.

نظرًا لأن مطوري DeltaSpike لا يبدو أنهم يخططون لتنفيذ بديل لـ @ManagedBean(eager=true) وبما أن OmiFaces لا تدعم هذا النوع من الحلول بعد، يرى.أنا أرسل رسالة في زجاجة.

في الوقت الحاضر، أنا فقط الوصول إلى @ManagedScoped(eager=true) فول، يتحول إلى أ @Named, ، في رأس xhtml الشائع لتطبيق الويب الخاص بي، ولكنه قبيح نوعًا ما.

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

المحلول

أفضل حل لتطبيق JSF مع DeltaSpike هو ما يلي:

@ApplicationScoped
public class MyBean
{
    public void init(@Observes PostConstructApplicationEvent event)
    {
        // init here
    }
}

نصائح أخرى

منذ Omnifaces 1.8، هناك CDI متوافق @Eager الذي لا يعمل فقط على @Named @ApplicationScoped, ، ولكن أيضًا على CDI @SessionScoped و @RequestScoped و Omnifaces @ViewScoped.أنظر أيضاً دخول بلوق و ال عرض المثال.

يمكنك استخدامه إما مع @Eager @ApplicationScoped:

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;

@Named
@Eager
@ApplicationScoped
public class Bean {
    // ...
}

أو مع @Startup, ، وهي صورة نمطية لـ @Eager @ApplicationScoped:

import javax.inject.Named;
import org.omnifaces.cdi.Startup;

@Named
@Startup
public class Bean {
    // ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top