2010-08-20 35 views

Trả lời

29

Bạn có thể đặt các tài nguyên phổ biến trong thư mục /META-INF/resources của JAR được xử lý giống như thư mục /WEB-INF/resources của WAR.

Ví dụ:

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 
: 

Các nguồn lực của JAR là sau đó có sẵn như sau:

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

Nếu bạn muốn kích hoạt các máy quét chú thích JSF2 cũng vì vậy mà bạn có thể đặt @ManagedBean, @FacesValidator, @FacesConverter và các phu nhân ở chỗ dự án là tốt, sau đó tạo một JSF2 tương thích /META-INF/faces-config.xml tệp:

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

Tài nguyên Facelets Trình phân giải chỉ cần thiết nếu tài nguyên không ở trong /META-INF/resources vì một số lý do hoặc khi bạn không sử dụng Servlet 3.0 nhưng 2.5 hoặc khi bạn đang sử dụng phiên bản JBoss/JSF sớm có lỗi trong giải quyết tài nguyên META-INF. Xem thêm How to create a modular JSF 2.0 application? để biết ví dụ cụ thể.

+0

Cách tiếp cận này đã không hoạt động trên JBoss 6 (Mojarra 2.0.1). Tôi đã thử nghiệm trên Tomcat 7 và Glassfish 4, và cả hai đều làm việc. JBoss ném ngoại lệ này: 'java.io.FileNotFoundException \t org.apache.naming.resources.DirContextURLConnection.getInputStream (DirContextURLConnection.java: 369) ' –

+1

@Rafael: http://stackoverflow.com/a/6201044 – BalusC

+0

Ấn tượng! Bây giờ làm việc như một say mê! Cảm ơn bạn rất nhiều @BalusC. –

1

Đầu tiên đọc ở đây về số difference between war and jar trong một câu hỏi tương tự.

Bạn sẽ phải tạo tệp EAR và đóng gói các cuộc chiến tranh với nhau.

+0

Ok, nhưng những gì tôi không hiểu là: tôi có thể đặt .war trong thư mục thư viện của một ứng dụng web mới và bao gồm các trang web từ .war vào các trang khác không? – Fabio

+0

cảm ơn bạn đã dành thời gian :) – Fabio

4

Có, bạn có thể mở rộng com.sun.faces.facelets.impl.DefaultResourceResolver để cung cấp tài nguyên cho JSF.

Một giải pháp chung như sau:

Trong pom.xml add bạn:

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

Hoặc chỉ cần thêm https://intersult.com/svn/public/maven/com/intersult/jsf-desktop/1.1-SNAPSHOT/jsf-desktop-1.1-SNAPSHOT.jar để WEB-INF thư mục của bạn// lib.

Trong web.xml add bạn:

<context-param> 
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> 
    <param-value>com.intersult.jsf_desktop.util.ClassPathResourceResolver</param-value> 
</context-param> 

Trong bất kỳ JAR bên trong nơi WAR XHTML-Files dưới/META-INF/nguồn/<file.xhtml>

truy cập nó thông qua "http : // < miền >/< web gốc >/< jsf-servlet >/tài nguyên/<file.xhtml> "(ví dụ http://localhost/faces/resource/test.xhtml.) và nó sẽ được trả lại.

Các vấn đề liên quan