TagException ссылается на пользовательский тег-файл JSF из другого пользовательского тег-файла JSF - PullRequest
0 голосов
/ 10 октября 2019

У меня есть функциональный файл тегов 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)

Теги фактически определены в другом повторно используемом фляге за пределами приложения, которым я на данный момент занимаюсьработа над. Баночка имеет следующую структуру:

| 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>
 ...

Это то, что я имею в отношении lib lib внутри 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>
 ...

Я считаю, что мне не хватает ссылок на один компонент на другой, но я просто не могу его найти. Кроме того, ошибка, о которой сообщают, не очень помогает.

ОБНОВЛЕНИЕ Как оказалось, я действительно все перепутал. С Когда использовать, файлы тегов, составные компоненты и / или пользовательские компоненты? Я понимаю (я думаю), что у меня есть НАСТОЯЩИЕ определения составных компонентов, но я был, без всякой причины, также включал ТАКЖЕ определение библиотеки тегов для тех же определений (Я думаю, я думал, что размещение определений CC внутри папки ресурсов было недостаточно). Я удалил определение тега, и CC работает.

...