استبدال @ManagedBean(eager=true) في JSF22
سؤال
أبحث عن حل لاستبدال @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 {
// ...
}