找到所需类javax.faces.FactoryFinder的多个版本

我开始使用JSF2.0。 我按照教程没有问题,一切正常! 我用过Eclipse Helios。 但我发现了一些我无法理解的东西。 该教程说要为JSF 2添加Project Facet。我没有做过这样的事情,一切正常。 所以要完全遵循教程,我做了:

右键单击Project – > Properties – > Project Facets

并且没有勾选JavaServer Faces facet复选框。 我认为这是Project Facet教程的含义。 我点击它和一个

需要进一步配置

链接出现了。 我按照指向JSFfunction(Modify Faceted Project)对话框的链接,我选择了用户库,我的JSF库(MyFaces),但是我收到了错误消息:

找到所需类javax.faces.FactoryFinder的多个版本。

这个错误是什么? 创建项目后,我无法添加项目构面吗? 我需要什么项目方面? 我的(普通)代码表明JSF工作正常,那么Facet对项目有用的是什么?

从Eclipse帮助 :

Facets定义Java EE项目的特征和要求,并用作运行时配置的一部分。

向项目添加构面时,该项目将配置为执行特定任务,满足某些要求或具有某些特征。 例如,EAR facet通过添加部署描述符和设置项目的类路径来设置项目以充当企业应用程序。

在JSF方面的情况下:

安装JSF facet时可以使用以下function:

  • JSF库配置支持
  • 应用配置管理
  • 使用表达式语言(EL)的大多数JSF Core和JSF HTML标记库属性值的JSP源页面语义validation和内容辅助。
  • “运行在服务器上”支持JSF JSP页面

在出现此错误的情况下:

找到所需类javax.faces.FactoryFinder的多个版本。

看起来工具已在项目类路径中检测到核心JSF API的多个副本。 JSF对此有一定的容忍度,并且历史上支持在不同的类加载器上下文中运行不同的版本 – 也就是说,您可以将一个放在WAR中,一个放在容器中。 使用“打开类型”对话框( CTRL + SHIFT + T )并搜索javax.faces.FactoryFinder应该可以帮助您找到罪魁祸首jar。

将JSF nature / facet添加到项目中会增加代码完成等function,将jsf可视化组件添加到您的项目的网页编辑器等。 检查你的构建补丁,看看有多少jsf api jar。 我假设这个错误是在IDE中而不是在正在运行的应用程序中。

JSF facet可帮助您使用JSF库对项目进行属性配置。 它还支持JSF Tools项目中的一系列JSF特定validation和工具。 虽然您可以在不使用JSF工具的情况下开发JSF应用程序,但如果您使用这些工具,则可以提高工作效率。

如果您有兴趣在教程中尝试使用JSF工具,请首先使用JSF facet创建一个新的Web项目。 然后跳过教程中有关配置库或创建描述符的部分。