我想知道它是否有可能通過使用JSF的Struts2向客戶端提供資源(如.css
文件)只有 if一個頁面在那一刻需要它。GWT,Struts2,JSF - 管理CSS - 僅在必要時提供
我不是說在當前加載的頁面上包含CSS,但是如果存在自動管理此過程的機制。
我想知道它是否有可能通過使用JSF的Struts2向客戶端提供資源(如.css
文件)只有 if一個頁面在那一刻需要它。GWT,Struts2,JSF - 管理CSS - 僅在必要時提供
我不是說在當前加載的頁面上包含CSS,但是如果存在自動管理此過程的機制。
在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>
註釋的資源。
嗯,是的,但是這看起來像一個簡單的「包括」在頁面上,它會使用.css。我想知道它是否可能包括(例如在索引中)所有.css文件,並從服務器下載所需頁面所需的css表單。可能嗎? – markzzz 2011-02-25 14:09:05
迷人。我最近在wicket中實現了一個在功能和語法上與這個@ResourceDependency/@ResourceDependencies機制非常相似的機制,而不知道這種技術。去顯示:有效地做事情的方式有限:-) +1 – 2011-02-25 14:09:47
@markzzz:不,那是不可能的。客戶無法事先知道所提供的樣式表中是否存在必要的樣式。 **您**負責提供*客戶端*實際*需要的特定頁面資源。 @西恩:不客氣。 – BalusC 2011-02-25 14:21:23
在BalusC的回答中似乎已經解決了您正在尋找的資源自動包含是不可能的。我同意。考慮一下,我可以想象一種方法來做到這一點,但這會使得結果頁面變得非常複雜並且膨脹,並且需要大量的開銷ajax來使其不合理。
然後就會有配置的問題來解釋什麼時候頁面x要求css類「熱」,它需要從「main.css」「熱」,而不是「company.css」換句話說......配置數量可能等於您自己管理它的工作量。
現在,如果您使用Struts2並且喜歡基於合成策略的策略,那麼Tiles2就是最簡單的方法。
基本上你製作模板,然後有一個單獨的定義文件,定義說明哪些資源要移入模板。所以你可以在某些CSS文件,腳本文件,jsps中移動,甚至組成多個臨時文件。然後,您繼承了後續定義的定義,並且可以覆蓋更改和擴展定義的部分(類似於OOP繼承獲得的)。名字來源於你的頁面被認爲是一些陶瓷磚的想法,這些陶瓷磚被定位爲生成一個頁面,然後通過繼承,你可以說一組特定的頁面將基於特定的佈局。當你使用瓦片繼承時,它可以感覺到你正在獲得神奇的資源管理...它使事情變得更容易,但它是直接組成。
瓷磚自然地面向構圖,但它也支持裝飾。許多人都以Sitemesh爲名,所以主要選擇裝飾方式。你需要看看這兩種佈局範例,看看對你最有意義的是什麼。
你的意思是「下載到客戶端?」 – 2011-02-25 13:56:39
術語確實是錯誤的:)上傳更多的是從客戶端到服務器。 CSS/JS文件基本上是從服務器下載到客戶端。我改進了它。 – BalusC 2011-02-25 13:58:47