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.