我是否需要 jsf-api 或 jsf-impl 或两者才能开始使用 JSF?他们为什么不合并?

Do I need jsf-api or jsf-impl or both to start using JSF? Why are they not merged?

我已经开始学习 JSF,我想知道在我们的类路径中包含什么 JAR 以开始使用 JSF。是 jsf-api 还是 jsf-impl?或者我们必须包括两者?如果两者都是那么为什么它们不合并?

我假设您没有使用像 WildFly, TomEE, Payara, etc, but a barebones JSP/Servlet container like Tomcat 这样的真正的 Java EE 应用程序服务器,它确实没有随 JSF 一起提供,因此您必须手动安装它.否则,所有这些对 JAR 的大惊小怪都是不必要的。


Is it jsf-api or jsf-impl? Or we have to include both?

两者都需要。 jsf-api.jar 包含 API,它们几乎只存在抽象 类 和接口。它是您在代码中导入和使用的 javax.faces.* 类型。 jsf-impl.jar 包含真正努力工作代码的实现。该实现是通过 API 中的工厂内部加载的。它是 com.sun.faces.* 类,您 而不是 应该直接在您的代码中导入和使用。如果这样做,那么您将无法切换到不同的 JSF 实现,例如 MyFaces。


And if it is both then why they are not merged?

存在一个合并的 JAR,javax.faces.jar。您可以选择这个而不是两个松散的 JAR。

另请参阅:

  • Our JSF wiki page
  • JSF implementations and component libraries
  • Difference between Mojarra and MyFaces
  • In simplest terms, what is a factory?
  • How to properly install and configure JSF libraries via Maven?