2011-02-25 36 views
1

我想知道它是否有可能通過使用JSF的Struts2向客戶端提供資源(如.css文件)只有 if一個頁面在那一刻需要它。GWT,Struts2,JSF - 管理CSS - 僅在必要時提供

我不是說在當前加載的頁面上包含CSS,但是如果存在自動管理此過程的機制。

+0

你的意思是「下載到客戶端?」 – 2011-02-25 13:56:39

+1

術語確實是錯誤的:)上傳更多的是從客戶端到服務器。 CSS/JS文件基本上是從服務器下載到客戶端。我改進了它。 – BalusC 2011-02-25 13:58:47

回答

3

在JSF2中,通過在模板或複合組件的任何位置使用<h:outputStylesheet><h:outputScipt>可以實現。 JSF將注意將其放入生成的HTML <head>中。

E.g.

<ui:composition 
    xmlns:h="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <h:outputStylesheet library="css" name="specific.css" /> 
    <h:outputScript library="js" name="specific.js" /> 
    ... 
</ui:composition> 

與webcontent的文件夾中的文件結合使用。

  • /resources/css/specific.css
  • /resources/js/specific.js

此外,在JSF2 UIComponent您可以強制使用@ResourceDependency@ResourceDependencies標註特定資源的負載。

@ResourceDependency(library="css", name="specific.css") 
public class CustomComponentWithCSS extends UIComponentBase { 
    // ... 
} 

@ResourceDependencies({ 
    @ResourceDependency(library="css", name="specific.css"), 
    @ResourceDependency(library="js", name="specific.js") 
}) 
public class CustomComponentWithCSSandJS extends UIComponentBase { 
    // ... 
} 

所以每當您在您的視圖代碼中使用<custom:componentWithCSS>,JSF2將包括在生成的HTML <head>註釋的資源。

+0

嗯,是的,但是這看起來像一個簡單的「包括」在頁面上,它會使用.css。我想知道它是否可能包括(例如在索引中)所有.css文件,並從服務器下載所需頁面所需的css表單。可能嗎? – markzzz 2011-02-25 14:09:05

+1

迷人。我最近在wicket中實現了一個在功能和語法上與這個@ResourceDependency/@ResourceDependencies機制非常相似的機制,而不知道這種技術。去顯示:有效地做事情的方式有限:-) +1 – 2011-02-25 14:09:47

+1

@markzzz:不,那是不可能的。客戶無法事先知道所提供的樣式表中是否存在必要的樣式。 **您**負責提供*客戶端*實際*需要的特定頁面資源。 @西恩:不客氣。 – BalusC 2011-02-25 14:21:23

1

在BalusC的回答中似乎已經解決了您正在尋找的資源自動包含是不可能的。我同意。考慮一下,我可以想象一種方法來做到這一點,但這會使得結果頁面變得非常複雜並且膨脹,並且需要大量的開銷ajax來使其不合理。

然後就會有配置的問題來解釋什麼時候頁面x要求css類「熱」,它需要從「main.css」「熱」,而不是「company.css」換句話說......配置數量可能等於您自己管理它的工作量。

現在,如果您使用Struts2並且喜歡基於合成策略的策略,那麼Tiles2就是最簡單的方法。

基本上你製作模板,然後有一個單獨的定義文件,定義說明哪些資源要移入模板。所以你可以在某些CSS文件,腳本文件,jsps中移動,甚至組成多個臨時文件。然後,您繼承了後續定義的定義,並且可以覆蓋更改和擴展定義的部分(類似於OOP繼承獲得的)。名字來源於你的頁面被認爲是一些陶瓷磚的想法,這些陶瓷磚被定位爲生成一個頁面,然後通過繼承,你可以說一組特定的頁面將基於特定的佈局。當你使用瓦片繼承時,它可以感覺到你正在獲得神奇的資源管理...它使事情變得更容易,但它是直接組成。

瓷磚自然地面向構圖,但它也支持裝飾。許多人都以Sitemesh爲名,所以主要選擇裝飾方式。你需要看看這兩種佈局範例,看看對你最有意義的是什麼。