2013-04-11 57 views
3

我有一個JSF 2.0頁,使用此:如何在<style>中包含樣式表的內容?

<h:head> 
<h:outputStylesheet name="screen.css" library="css" /> 
</h:head> 

其中非常漂亮生成此HTML:

<head> 
<link type="text/css" rel="stylesheet" 
    href="/myapp/javax.faces.resource/screen.css.jsf?ln=css" /> 
</head> 

這是偉大的,當頁面在瀏覽器中被查看。但是,我想使用嵌入在HTML頁面中的樣式表,通過電子郵件發送給用戶。我不希望他們的電子郵件客戶端從服務器加載樣式表。我希望通過電子郵件發送給他們的文檔是自給自足的,不會受到網站樣式表變化(甚至不存在)的影響。

我希望HTML輸出是這樣的:

<head> 
<style type="text/css"> 
    ...contents of screen.css here... 
</style> 
</head> 

我試圖用這個來實現這一目標:

<h:head> 
<style type="text/css"> 
<ui:include src="/resources/css/screen.css"></ui:include> 
</style> 
</h:head> 

但我收到此錯誤:

javax.servlet.ServletException: Error Parsing /resources/css/screen.css: 
Error Traced[line: 1] Content is not allowed in prolog. 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 

我怎樣才能讓樣式表的內容出現在文檔的頭部?

回答

5

不符合標準的JSF組件。

JSF實用程序庫OmniFaces有一個<o:resourceInclude>,其目的是在JSF頁面中包含非JSF Web應用程序資源的原始輸出。

<h:head> 
    <style type="text/css"> 
     <o:resourceInclude path="/resources/css/screen.css" /> 
    </style> 
</h:head> 

注意,這不支持資源本地化和版本控制,也不評價EL表達式在CSS文件,如爲<h:outputStylesheet>會做。

+0

謝謝,@BalusC。儘管如此,我寧願避免將另一個庫添加到我的項目中來獲取此功能。你還有其他建議嗎?如果有幫助,我的項目也使用RichFaces。我不知道該圖書館是否有任何可以幫助我的功能。感謝您更改我的問題! – 2013-04-11 18:32:07

+0

OmniFaces是開源的。只需根據其來源創建相同的組件。 RichFaces沒有這樣的東西,它只針對純粹的UI組件,而不是一般的實用程序。 OmniFaces在這方面相當獨特。 – BalusC 2013-04-11 19:19:42

+0

感謝您的建議。我會爲此努力。 – 2013-04-11 20:28:22

相關問題