Я пытаюсь создать составной компонент для использования в моих проектах, поэтому я создал проект под названием "componententes-ui-web" и поместил 2 файла xhtml, которые являются моими компонентами.
Структура проекта выглядит следующим образом:
src
> |-> main
> > |->java
> > |->META-INF
> > |->faces-config.xml
> > |->resources
> > |->componentes
> > |->popupSimples.xhtml
> > |->popupSubmit.xhtml
Это код popupSubmit.xhtml
:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:icecore="http://www.icefaces.org/icefaces/core"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ace="http://www.icefaces.org/icefaces/components">
<composite:interface>
<composite:attribute name="modal" default="false" />
<composite:attribute name="visivel" default="false" />
<composite:attribute name="style" default="" />
<composite:attribute name="titulo" default="Sem título definido" />
<composite:attribute name="exibidoQuandoTipoUsuario" default="" />
<composite:attribute name="metodoFechar"
method-signature="java.lang.Void fechar()" required="true" />
<composite:attribute name="metodoSubmeter"
method-signature="java.lang.Void submeter()" required="true" />
<composite:facet name="conteudo" />
</composite:interface>
<composite:implementation>
<h:form>
<ice:panelPopup modal="#{cc.attrs.modal}"
renderedOnUserRole="#{cc.attrs.exibidoQuandoTipoUsuario}"
draggable="#{cc.attrs.modal}" rendered="#{cc.attrs.visivel}"
clientOnly="true" autoCentre="true" style="#{cc.attrs.style}">
<f:facet name="header">
<ui:insert name="barraDeTitulos">
<ice:panelLayout layout="flow" style="width:100%">
<h:outputText value="#{cc.attrs.titulo}" style="float:left" />
<h:commandLink value="[X]" style="float:right"
action="#{cc.attrs.metodoFechar}" immediate="true" />
</ice:panelLayout>
</ui:insert>
</f:facet>
<f:facet name="body">
<ice:panelLayout layout="flow" style="width:100%">
<composite:renderFacet name="conteudo" />
<ui:insert name="barraDeBotoes">
<ice:panelLayout layout="flow">
<ace:pushButton value="CANCELAR" immediate="true"
style="float:right" action="#{cc.attrs.metodoFechar}" />
<ace:pushButton value="OK" style="float:right"
action="#{cc.attrs.metodoSubmeter}" />
</ice:panelLayout>
</ui:insert>
</ice:panelLayout>
</f:facet>
</ice:panelPopup>
</h:form>
</composite:implementation>
</html>
В другом веб-проекте я пытаюсь использовать этот компонент, просто добавив этот jar вlib (maven) и добавление тега:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:icecore="http://www.icefaces.org/icefaces/core"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:hrgi="http://java.sun.com/jsf/composite/componentes"
xmlns:ace="http://www.icefaces.org/icefaces/components">
<ui:component>
<f:loadBundle basename="com.hrgi.web.configuracoes.messages"
var="configuracoesMsg" />
<hrgi:popupSubmit modal="true" visivel="true"
titulo="#{configuracoesMsg['popup.importador_nfe.titulo']}"
exibidoQuandoTipoUsuario="ROLE_ADMINISTRADOR"
metodoFechar="#{controladorPopupConfiguracaoImportadorNFe.fechar}"
metodoSubmeter="#{controladorPopupConfiguracaoImportadorNFe.submeter}">
<f:facet name="conteudo">
...
</hrgi:popupSubmit>
</ui:component>
</html>
Когда я запускаю приложение, компонент не отображается, и я получаю следующее сообщение в Firefox:
Предупреждение: Эта страница требует пространства имен XML http://java.sun.com/jsf/composite/componentes, объявленного с префиксом hrgi, но для этого пространства имен не существует библиотеки тегов.
Что я сделал не так ??
Обновление спасибо за ответы и извините за задержку с ответом ...
Я создал ResourceResolver, как сказал BalusC, но безуспешно.Я также проверил вывод tomcat, но не нашел никакой ошибки.
Это мой файл web.xml
, возможно, кто-то найдет что-нибудь, что может мне помочь.Я тоже буду искать в ResourceHandler.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>teste-zk</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>/icefaces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.hrgi.web.ui.FaceletsResourceResolver</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.enableMissingResourceLibraryDetection</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>
</web-app>