Hello,
I am using Facelets, and I am trying to access some Seam components in a tag-like class. I have this UIXtw class that I use like a tag. It is 'mapped' in brit.taglib.xml and that taglib is linked into web.xml as I learned from some tutorials online:
@Name("UIXtw") @AutoCreate public class UIXtw extends UIOutput { @In private LocalXTextSessionWrapper xtw; @Override public void encodeBegin(FacesContext context) throws IOException { // XTextSessionWrapper xtw = (XTextSessionWrapper) Contexts.getSessionContext().get("xtw"); log.info("xtw= #0", xtw); log.info("xtw.activeLanguage= #0", xtw.getActiveLanguage()); ... } @Override public void encodeEnd(FacesContext context) throws IOException { } }
XTextSessionWrapper.java:
@Stateful @Name("xtw") @Scope(ScopeType.SESSION) @AutoCreate public class XTextSessionWrapper implements LocalXTextSessionWrapper { ... @In(required = false, create = true) @Out(required = false) private XLanguage activeLanguage; public XLanguage getActiveLanguage() { if (activeLanguage == null) { setActiveLanguage(xLanguageDAO.findXLanguageByIdentifier("ro")); } return activeLanguage; } public void setActiveLanguage(XLanguage activeLanguage) { this.activeLanguage = activeLanguage; } ... }
Well, the problem is that when the encodeBegin() method is called, it cannot find the injected LocalXTextSessionWrapper and it reports it as null. As you can see from the commented line, I have also tried to get it from the session context manually with no success. I must mention that the same xtw injected in other components works fine.
Could anyone please turn the lights on this problem? What am I missing? Why is the injected value null?
Thank you in advance for any hint,
Cristina.
You can't make your JSF component into a Seam component.
You should use EL rather than look things up directly as well.