Structure for multiple JSF projects with shared code

前端 未结 1 786
予麋鹿
予麋鹿 2020-11-22 09:02

I have two JSF projects that share a lot of code - java classes, xhtml files, tag libraries, css and javascript files etc. My dev environment/platform consists mainly of Ecl

相关标签:
1条回答
  • 2020-11-22 09:21

    Create a new "Java Project" in Eclipse. Add it as another project to the Deployment Assembly property of the main dynamic web project. This way it will automatically end up as a JAR in /WEB-INF/lib of the build of the web project. Since newer Eclipse versions, you can also create the project as "Web Fragment Project". This way the Deployment Assembly step will be done automatically.

    Put all those shared JSF2/Facelets resource files in /META-INF/resources folder of the Java project. Just treat it like WebContent/resources of the main web project. Tagfiles can just be kept in their own /META-INF/tags folder.

    E.g.

    CommonWebProject
     |-- META-INF
     |    |-- resources
     |    |    `-- common
     |    |         |-- css
     |    |         |    `-- some.css
     |    |         |-- js
     |    |         |    `-- some.js
     |    |         |-- images
     |    |         |    `-- some.png
     |    |         |-- components
     |    |         |    `-- somecomposite.xhtml
     |    |         `-- sometemplate.xhtml
     |    |-- tags
     |    |    `-- sometag.xhtml
     |    |-- beans.xml
     |    |-- faces-config.xml
     |    |-- some.taglib.xml
     |    |-- web-fragment.xml
     |    `-- MANIFEST.MF
     :
    

    with

    <h:outputStylesheet library="common" name="css/some.css" />
    <h:outputScript library="common" name="js/some.js" />
    <h:graphicImage library="common" name="images/some.png" />
    <common:somecomposite />
    <common:sometag />
    <ui:include src="/common/sometemplate.xhtml" />
    ...
    

    In case you're using Maven, the /META-INF folder has to be placed in src/main/resources and thus NOT src/main/java.

    If you want to trigger the JSF2 annotation scanner as well so that you can put @ManagedBean, @FacesValidator, @FacesConverter and consorts in that project as well, create a JSF2 compatible /META-INF/faces-config.xml file as well (it can even be kept empty).

    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
        version="2.0">
    </faces-config>
    

    That's all.

    See also:

    • Splitting up shared code and web.xml from WAR project to common JAR project
    • JSF facelets template packaging
    • Obtaining Facelets templates/files from an external filesystem or database
    0 讨论(0)
提交回复
热议问题