从另一个JSF定制标记文件引用JSF定制标记文件的TagException

时间:2019-10-10 17:31:09

标签: jsf facelets tagfile

我有一个功能性的JSF标记文件<w:export>,它基本上是Primefaces <p:dataExporter>的包装。它已经可以正常工作了一段时间了。

最近,需要开发另一个标记文件<w:table>,而该标记文件又将使用<w:export>标记文件。但是,一旦包含<w:export>并使用新的标记文件显示页面,则会出现以下消息错误:

javax.faces.view.facelets.TagException: /WEB-INF/lib/tags.jar/META-INF/resources/components/newcomponents/table.xhtml @29,65 <w:export> /D:/demo/target/demo-web.war/WEB-INF/lib/tags.jar/META-INF/components/export.xhtml
at com.sun.faces.facelets.tag.UserTagHandler.apply(UserTagHandler.java:145)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135)
at com.sun.faces.facelets.tag.jsf.core.FacetHandler.apply(FacetHandler.java:105)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96)

标签实际上是在我当前正在处理的应用程序之外的另一个可重用jar中定义的。该罐具有以下结构:

| META-INF
|   + resources
|   |   + components
|   |   |   + newcomponents
|   |   |   |      table.xhtml
|   |   |   | export.xhtml
|   |
|   w_components.taglib.xml
|   web-fragment.xml
|

<w:export>的相关代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:composite="http://java.sun.com/jsf/composite"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pe="http://primefaces.org/ui/extensions"
        >

    <composite:interface name="export" displayName="Wraps primefaces dataExport">
  ...
 <composite:implementation>
        <p:panelGrid ..>
            <p:panel ...>
                <f:facet name="header">
                    <h:outputLabel ..."/>
                </f:facet>

                <p:panelGrid ...>

                    <p:commandLink ...>
                       <p:dataExporter.../>
                   </p:commandLink>
       ...

<w:table>定义的相关代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:w="http://org.custom/components">
...
 <composite:interface name="dataTable" displayName="Wraps primefaces dataTable">

<composite:implementation>
        <h:panelGrid ...>
         <p:dataTable...>
             <f:facet name="header">
                ...
                <w:export .../>
             </facet>
         </p:dataTable>

...

w_components.taglib.xml

的相关内容

  ...
  <facelet-taglib>
    <namespace>http://org.custom/components</namespace>
    <tag>
        <tag-name>table</tag-name>
        <source>components/newcomponents/table.xhtml</source>
    </tag>
    <tag>
        <tag-name>export</tag-name>
        <source>components/export.xhtml</source>
    </tag>
 ...

这就是我对 web-fragment.xml

中的标记库的了解

 ...
    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/w_components.taglib.xml</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
        <param-value>/WEB-INF/w_components.taglib.xml</param-value>
    </context-param>
 ...

我相信关于从一个组件到另一个组件的引用我缺少一些东西,但是找不到它。除了抛出的错误没有太大帮助。

更新 事实证明,我实际上是在混淆。从When to use <ui:include>, tag files, composite components and/or custom components?中,我理解(我认为)我实际上是复合组件定义,但毫无理由地包括ALSO那些相同定义的标签库定义(我想我认为应该将CC定义放在资源中文件夹还不够)。 我已经删除了标签定义,并且抄送正在工作。

0 个答案:

没有答案
相关问题