找不到 JSF 2.1.13 定制组件:标记库支持命名空间: <namsepace> 但没有为 name 定义标记: <compositecomponent>



问题

我正在使用JSF 2.1.13创建一个原型,以展示JSF相对于我们当前使用JSPstruts 1.1构建的Web应用程序的优势。下面的代码使用JSF 2.2.6,但当我发现OracleWeblogic 12c还不支持JSF 2.2时,我不得不降级。当使用2.1.13运行代码时,我收到以下错误:

/pages/sites/tab-details.xhtml @27,90 <ccc:codedType> Tag Library supports namespace: http://java.sun.com/jsf/composite/ccc, but no tag was defined for name: codedType

谷歌搜索只让我发现了一个关于嵌套复合组件的错误,但这不是我正在做的事情。

代码

摘自pom.xml

<!-- JSF Dependencies -->
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.1.13</version>
</dependency>
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.1.13</version>
</dependency>

复合成分:webapp/WEB-INF/resources/ccc/codedType.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<ui:component xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:cc="http://java.sun.com/jsf/composite">
  <cc:interface shortDescription="Renders a CodedType">
    <cc:attribute name="value" required="true"
      shortDescription="Instance of CodedType to be properly rendered"
      type="company.prototype.uireplacement.presenter.CodedType" />
    <cc:attribute name="includeCode"
      shortDescription="Whether or not the rendeder type should include the code"
      type="boolean" default="false"/>
  </cc:interface>
  <cc:implementation>
    <span id="#{cc.attrs.id}">#{cc.attrs.value.label}<ui:fragment rendered="#{cc.attrs.includeCode}"> (#{cc.attrs.value.code})</ui:fragment></span>
  </cc:implementation>
</ui:component>

使用复合组件的页面:webapp/pages/sites/tab-details.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:ccc="http://java.sun.com/jsf/composite/ccc">
      <ccc:codedType value="#{siteControllerBean.selectedSite.type}" includeCode="true"/>
</ui:composition>

经过更多的挖掘,我发现了导致错误的原因。注意我的内容的位置:webapp/WEB-INF/resources/ccc/codedType.xhtml。合适的位置应该是webapp/resources/ccc/codedType.xhtml(根与WEB-INF(。在JSF2.2中,他们允许对位置进行配置,我在web.xml:中有以下内容

<context-param>
  <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
  <param-value>/WEB-INF/resources</param-value>
</context-param>

这就是为什么JSF 2.2中的工作原理。

解决我的问题是删除javax.faces.WEBAPP_RESOURCES_DIRECTORY,因为它在JSF 2.1中没有使用,并将资源移到根目录。

我最近收到了这个错误:请确保将模板放在src位置/META-INF/resources/myFolder并使用xmlns:tp="http://java.sun.com/jsf/composite/myFolder">这帮助我解决了这个问题。

最新更新