开发者

JSF 2.0 composite component into jar

I'm trying create a composite component to use across my projects, so, I've created a project called "componentes-ui-web" and putted 2 xhtml files that are my components.

The structure of the project is like this:

src
> |-> main
> >       |->java
> >          |->META-INF
> >              |->faces-config.xml
> >              |->resources
> >                    |->componentes
> >                           |->popupSimples.xhtml
> >                           |->popupSubmit.xhtml

This is the code of 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>

In another Web project I try to use this component simply adding that jar to the lib (maven) and adding the tag:

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

When I run the application, the component isn't shown and I receive this message in the firefox:

Warning: This page calls for XML namespace http://java.sun.com/jsf/composite/componentes declared with prefix hrgi but no taglibrary exists for that namespace.

What I did wrong??


Update thanks for the replies and sorry for the late to answer...

I've created the ResourceResolver like BalusC told, but without success. I've checked the output of tomcat too, but didn't find any error.

This is my web.xml file, perhaps someone can find anything that could help me. I will search about ResourceHandler too.

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


I've solved the problem. I've looked inside the jar file and didn't see the META-INF/resources folder with the xhtml files. So I changed the META-INF folder from src/main/java to src/main/resources. It worked


You should check if the ResourceHandler installed can locate the library and resource (popupSubmit.xhtml) inside you JAR file. Use a ResourceResolver will not help, because it is used for facelets (ui:xxx and facelet views). If there is some ResourceHandler wrapper that prevents locate the library and the resource, or some other problem on the classpath, it is expected the warning you are looking can be seen.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜