是否有可能将具有共同内容的JSF2 Facelets文件放入JAR文件中,以便从其他Web应用程序中使用,例如<ui:composition template>
,<ui:include src>
,<cc:implementation>
等?如果可以,我该如何实现?是否需要进行额外的配置?
是否有可能将具有共同内容的JSF2 Facelets文件放入JAR文件中,以便从其他Web应用程序中使用,例如<ui:composition template>
,<ui:include src>
,<cc:implementation>
等?如果可以,我该如何实现?是否需要进行额外的配置?
/META-INF/resources
文件夹中,这样就可以像/WEB-INF/resources
文件夹一样处理。例如:CommonWebProject
|-- META-INF
| |-- resources
| | `-- common
| | |-- css
| | | `-- some.css
| | |-- js
| | | `-- some.js
| | |-- images
| | | `-- some.png
| | |-- components
| | | `-- somecomposite.xhtml
| | |-- someinclude.xhtml
| | `-- sometemplate.xhtml
| |-- faces-config.xml
| `-- MANIFEST.MF
:
JAR包的资源可以按照以下方式使用:
<... xmlns:common="http://xmlns.jcp.org/jsf/composite/common/components">
<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 />
<ui:include src="/common/someinclude.xhtml" />
<ui:composition template="/common/sometemplate.xhtml" />
...
如果你想要触发JSF2注解扫描器,这样你就可以在该项目中使用@ManagedBean
, @FacesValidator
,@FacesConverter
等注解,那么请创建一个JSF2兼容的/META-INF/faces-config.xml
文件:
<?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>
仅当资源不在/META-INF/resources
中,或者您不使用Servlet 3.0而是2.5时,或者当您使用早期的JBoss/JSF版本且存在META-INF资源解析错误时,Facelets资源解析器才是必需的。请参见如何创建模块化JSF 2.0应用程序?,以获取一个具体示例。
是的,您可以扩展com.sun.faces.facelets.impl.DefaultResourceResolver来为JSF提供资源。
一个通用的解决方案如下:
在您的pom.xml文件中添加:
<dependency>
<groupId>com.intersult</groupId>
<artifactId>jsf-desktop</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<repository>
<id>intersult-repo</id>
<name>Intersult Repository</name>
<url>https://intersult.com/svn/public/maven</url>
</repository>
或者,将https://intersult.com/svn/public/maven/com/intersult/jsf-desktop/1.1-SNAPSHOT/jsf-desktop-1.1-SNAPSHOT.jar添加到您的/WEB-INF/lib文件夹中。
在您的web.xml文件中添加:
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.intersult.jsf_desktop.util.ClassPathResourceResolver</param-value>
</context-param>
首先在类似问题中阅读war和jar的区别。
您需要创建EAR文件并将wars打包在一起。
请注意,如果您正在使用Maven创建JAR文件,应将您的资源放入以下文件夹中:
src/main/resources/META-INF/resources/
java.io.FileNotFoundException org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:369)
。 - Rafael Orágio