java - 找不到 JSF 2.1.13 自定义组件 : Tag Library supports namespace: <namsepace> but no tag was defined for name: <compositecomponent>

标签 java jsf-2 composite-component mojarra

问题

我正在使用 JSF 2.1.13 创建一个原型(prototype),以展示 JSF 相对于我们当前使用 JSPstruts 1.1 构建的 webapp 的优势>。我遵循使用 JSF 2.2.6 的代码,但是一旦发现 Oracle Weblogic 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

谷歌搜索只指向一个 bug about nested composite components ,但这不是我正在做的事情。

代码

摘自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(root vs WEB-INF)。在 JSF 2.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 中使用,并将资源移动到根。

关于java - 找不到 JSF 2.1.13 自定义组件 : Tag Library supports namespace: <namsepace> but no tag was defined for name: <compositecomponent>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814433/

相关文章:

java - Spring-data-elasticsearch 元数据_score

java - 尝试创建新的 Spring Starter 项目时出错

java - nameNode无法启动-hadoop-1.0.3 Ubuntu 13.10单节点集群

java - JSF 实用程序类

java - 如何创建具有动态属性的复合组件?

javascript - 无法访问jsf组件中的javascript文件

java - 创建一个 ListIterator 对象

java - JSF 2 - f :ajax tag doesn't work

jsf - 使用 ui 的复合组件调用方法中缺少参数值 :repeat

java - 无法使用 AJAX 编辑表格行