binding="#{cc.table}":目标无法到达,标识符 'cc' 解析为空

binding="#{cc.table}": Target Unreachable, identifier 'cc' resolved to null

我正在尝试重现以下 example,但在 dynamicFieldList.xhtml 中未检测到 #{cc.table},并且出现以下错误:

/WEB-INF/tags/dynamicFieldList.xhtml @17,93 binding="#{cc.table}": Target Unreachable, identifier 'cc' resolved to null

下面是代码行

<ui:composition
...
    xmlns:cc="http://java.sun.com/jsf/composite">
...

<cc:implementation>

    <h:dataTable id="table" binding="#{cc.table}" value="#{cc.attrs.value}" var="field">

        <h:column><h:outputLabel value="#{field.label}" /></h:column>

        // ...
</cc:implementation>

...

可能与同一问题有关,但也未检测到 "Field" Class 的输出标签中的标签和值字符串。这可能是什么原因?

我对复合组件实现中此位置的内容辅助的期望是不可能的。

通过创建以下文件夹:WebContent > resources > mycomponents 我放置复合组件的位置解决了我的问题。

您的错误消息中的路径看起来不正确。

/WEB-INF/tags/dynamicFieldList.xhtml

复合组件不属于那里。您似乎已将复合组件视为标记文件。这是不对的。它与标记文件非常不同。复合组件应该放置在代表库名称的子文件夹中的 JSF /resources 文件夹中。下面的示例使用 components 作为库名称。

WebContent
 |-- META-INF
 |-- WEB-INF
 |-- resources
 |    `-- components
 |         `-- dynamicFieldList.xhtml   <--- Here.
 `-- some.xhtml

此外,您不需要像对标记文件那样在 *.taglib.xml 文件中声明它们。您可以通过隐式 http://java.sun.com/composite/[libraryName] XML 命名空间来声明它们。

<html ... xmlns:my="http://java.sun.com/composite/components">
...
<my:dynamicFieldList ... />

另请参阅: