У меня проблемы с работой CDI в проекте JSF. Я не могу принудительно заставить CDI внедрить компонент на основе интерфейса *1002* в файл JSF.
@Named
public class ClassBasedNamedBean {
public String getMessage() {
return "Class-based Hello World!";
}
}
@Named
public interface InterfaceBasedNamedBean {
public String getMessage();
}
public class InterfaceBasedNamedBeanImpl implements InterfaceBasedNamedBean {
@Override
public String getMessage() {
return "Interface-based Hello World!";
}
}
Я могу использовать оба компонента в среде WebServlet:
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
@Inject
private ClassBasedNamedBean classBasedNamedBean;
@Inject
private InterfaceBasedNamedBean interfaceBasedNamedBean;
protected void doGet(...) ... {
PrintWriter pw = response.getWriter();
pw.println("classBasedNamedBean: " + classBasedNamedBean.getMessage());
pw.println("interfaceBasedNamedBean: " + interfaceBasedNamedBean.getMessage());
// Output:
// classBasedNamedBean: Class-based Hello World!
// interfaceBasedNamedBean: Interface-based Hello World!
}
}
Но interfaceBasedNamedBean
недоступно на странице JSF:
<p>ClassBasedNamedBean: #{classBasedNamedBean.message}</p>
<p>InterfaceBasedNamedBean: #{interfaceBasedNamedBean.message}</p>
Output:
<p>ClassBasedNamedBean: Class-based Hello World!</p>
<p>InterfaceBasedNamedBean: </p>
Как я мог решить эту проблему? Требуется ли JSF какая-либо явная конфигурация для interfaceBasedNamedBean
?