具有共享代码的多个 JSF 项目的结构
Posted
技术标签:
【中文标题】具有共享代码的多个 JSF 项目的结构【英文标题】:Structure for multiple JSF projects with shared code 【发布时间】:2012-01-09 08:48:06 【问题描述】:我有两个共享大量代码的 JSF 项目 - java 类、xhtml 文件、标签库、css 和 javascript 文件等。我的开发环境/平台主要由 Eclipse、Ant、Perforce 和 Tomcat 组成。
有没有人找到一种方法来创建和组织共享代码,以便公共代码可以保留在一组文件夹中?
Eclipse 可以很容易地为 java 源添加外部文件夹,但在其他文件类型方面存在不足。我会很感激任何想法。
【问题讨论】:
【参考方案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>
就是这样。
另见:
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【讨论】:
非常感谢!我也很荣幸您的回复多次访问您的博客,讨论许多 JSF 问题! @Heizenberg,如果他有帮助,请将回复标记为答案并通过单击侧面的向上箭头对其进行投票。它是表示感谢的堆栈交换方式:) 谢谢弗雷德里克。我用“打勾”标记将其标记为答案。我现在需要“建立声望”,这样我才能投票(需要“15 声望”才能投票) @BalusC:如果我使用的是 JSF 1.2,这会有所不同吗? 是的。您需要实现一个 facelets 资源解析器:***.com/questions/5587808/…。但是由于您提到“xhtml”并且 JSF 1.2 退出了 2 年,所以我自动假设 JSF 2.0 ... 那么,您使用的是 JSF 1.2?对不起,我的错,我不应该假设 JSF 2.0。有机会升级吗?这可能会有所帮助:***.com/questions/4441713/…以上是关于具有共享代码的多个 JSF 项目的结构的主要内容,如果未能解决你的问题,请参考以下文章