【问题标题】:Structure for multiple JSF projects with shared code具有共享代码的多个 JSF 项目的结构
【发布时间】:2012-01-09 08:48:06
【问题描述】:

我有两个共享大量代码的 JSF 项目 - java 类、xhtml 文件、标签库、css 和 javascript 文件等。我的开发环境/平台主要由 Eclipse、Ant、Perforce 和 Tomcat 组成。

有没有人找到一种方法来创建和组织共享代码,以便公共代码可以保留在一组文件夹中?

Eclipse 可以很容易地为 java 源添加外部文件夹,但在其他文件类型方面存在不足。我会很感激任何想法。

【问题讨论】:

    标签: eclipse jsf structure projects


    【解决方案1】:

    在 Eclipse 中创建一个新的“Java 项目”。将其作为另一个项目添加到主动态 Web 项目的 Deployment Assembly 属性中。这样,它将自动以 JAR 的形式出现在 Web 项目构建的/WEB-INF/lib 中。由于较新的 Eclipse 版本,您还可以将项目创建为“Web Fragment Project”。这样部署组装步骤将自动完成。

    将所有这些共享资源文件放在Java 项目的/META-INF/resources 文件夹中。只需将其视为主 Web 项目的 WebContent/resources 即可。标记文件可以保存在它们自己的/META-INF/tags 文件夹中。

    例如

    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
     :
    

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

    如果您使用 Maven,/META-INF 文件夹必须放在 src/main/resources 中,因此不是 src/main/java

    如果您还想触发 JSF 注释扫描器,以便您可以将 @FacesValidator@FacesConverter@FacesComponent@FacesRenderer 和 consorts 也放入该项目中,那么创建一个 /META-INF/faces-config.xml 文件为好吧。下面是一个兼容 JSF 2.3 的:

    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
        version="2.3">
        <!-- Put shared faces-config.xml config here. -->
    </faces-config>
    

    /META-INF/web-fragment.xml 是 JAR 被 servletcontainer 识别为“Web 片段项目”所必需的,并且应该已经由您的 IDE 生成,但为了完整起见,这里是 Servlet 4.0 的样子兼容的:

    <?xml version="1.0" encoding="utf-8"?>
    <web-fragment
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-fragment_4_0.xsd"
        version="4.0">
        <!-- Put shared web.xml config here. -->
    </web-fragment>
    

    就是这样。

    另见:

    【讨论】:

    • 非常感谢!我也很荣幸您的回复多次访问您的博客,讨论许多 JSF 问题!
    • @Heizenberg,如果他有帮助,请将回复标记为答案并通过单击侧面的向上箭头对其进行投票。它是表示感谢的堆栈交换方式:)
    • 谢谢弗雷德里克。我用“打勾”标记将其标记为答案。我现在需要“建立声望”,这样我才能投票(需要“15 声望”才能投票)
    • @BalusC:如果我使用的是 JSF 1.2,这会有所不同吗?
    • 是的。您需要实现一个 facelets 资源解析器:stackoverflow.com/questions/5587808/…。但是由于您提到“xhtml”并且 JSF 1.2 退出了 2 年,所以我自动假设 JSF 2.0 ... 那么,您使用的是 JSF 1.2?对不起,我的错,我不应该假设 JSF 2.0。有机会升级吗?这可能会有所帮助:stackoverflow.com/questions/4441713/…
    猜你喜欢
    • 2020-04-21
    • 2020-02-29
    • 2010-09-13
    • 2012-10-29
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多