2

我正在尝试创建一个复合组件以在我的项目中使用,因此,我创建了一个名为“componentes-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>

在另一个 Web 项目中,我尝试使用这个组件,只需将该 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 中收到此消息:

警告:此页面调用以前缀 hrgi 声明的 XML 命名空间http://java.sun.com/jsf/composite/componentes ,但该命名空间不存在标记库。

我做错了什么??


更新感谢您的回复,抱歉迟到了...

我已经像 BalusC 所说的那样创建了 ResourceResolver,但没有成功。我也检查了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>
4

2 回答 2

6

我已经解决了这个问题。我查看了 jar 文件,没有看到带有 xhtml 文件的 META-INF/resources 文件夹。所以我将 META-INF 文件夹从 src/main/java 更改为 src/main/resources。有效

于 2011-09-21T18:31:41.387 回答
0

您应该检查安装的 ResourceHandler 是否可以在您的 JAR 文件中找到库和资源 (popupSubmit.xhtml)。使用 ResourceResolver 将无济于事,因为它用于 facelets(ui:xxx 和 facelet 视图)。如果有一些 ResourceHandler 包装器阻止定位库和资源,或者类路径上的一些其他问题,预计可以看到您正在查看的警告。

于 2011-09-02T19:25:27.693 回答