我一直在組件上工作,目前我正在嘗試根據爲組件選擇的選擇器做不同的事情。如何通過RequestPathInfo正確檢查選擇器和擴展
所以基本上,如果我有這樣的結構
myComponent/
dialog.xml
myComponent.jsp
altView.jsp
我知道,如果我有resourceType爲myComponent的節點,我可以通過請求通過瀏覽器請求ALT視圖組件「路徑/到/組件/內容.altView.html「,而且一切都很豪華。
同樣地,我可以做一個CQ包括和做類似:
# with cq include
<cq:include path="my/path.altView" resourceType="myComponent"/>
# or with sling include
<sling:include path="my/path" resourceType="myComponent" replaceSelectors="altView"/>
然而,當我在處理請求,我看RequestPathInfo對象時看到了一些有趣的現象。
例如,如果我們看一下上面的情況下,所有3我可能有這樣的事情:
# http://path/to/component/content.altView.html
slingRequest.getRequestPathInfo().getSelectors(); // {altView}
slingRequest.getRequestPathInfo().getExtension(); // html
# <sling:include path="my/path" resourceType="myComponent" replaceSelectors="altView"/>
slingRequest.getRequestPathInfo().getSelectors(); // {altView}
slingRequest.getRequestPathInfo().getExtension(); // html
# <cq:include path="my/path.altView" resourceType="myComponent"/>
slingRequest.getRequestPathInfo().getSelectors(); // []
slingRequest.getRequestPathInfo().getExtension(); // altView
我明白爲什麼CQ:包括返回不同的結果(我們正在做的請求,我/path.altView和.altView在這種情況下巧合地用作擴展)。我很好奇,如果有一個標準化爲什麼拉「altView」(或選定的視圖),無論它是否被用作擴展或選擇器。或者,如果這是正常的,我只需要單獨檢查擴展和選擇器。
即
selectors = get selectors();
if selectors
do stuff
else check extensions
do stuff
再次非常感謝您的見解,這個社會是真棒。
[編輯]
針對一個答案,我想我給多一點背景下我在做什麼。基本上,我們的組件結構已經建立,以便我們的每個組件都有一個處理業務邏輯的相關Java類。 (IE應用程序/ myapp/components/myComponent將映射到com.mypackage.components.MyComponent)也就是說,在我的組件的類中,我需要根據組件的調用方式來處理控制流(即選擇器/擴展名/等等)。例如,如果我的組件被正常調用,我會執行基本行爲,但如果它被選擇器調用(例如)「altView」,我需要以不同的方式處理替代視圖,並且在這個替代視圖中,不同的數據將會可等
我的問題是沿基礎,它似乎我可以給「路徑」一個屬性「CQ:包括」標記我想使用的選擇:
<cq:include path="my/path.altView" resourceType="myComponent"/>
然而,當我檢查我的組件類中的我的RequestPathInfo來決定工作流時,「altView」作爲擴展返回,而不是在String []選擇器中。注意,上面的代碼編譯得很好,它選擇了用於渲染的正確的.jsp文件,RequestPathInfo對象只是將數據存儲在不同的地方。
我開始猜測,將選擇器放入路徑屬性的工作原理是因爲選擇器和擴展修改器改變行爲的方式相似。 mycomponent.altView.html解析爲altView.jsp,而如果我要執行mycomponent.altView,它也會嘗試解析mycomponent/altView.jsp,就像它對mycomponent.xml執行mycomponent/XML一樣。jsp
感謝您的支持。但是,我認爲我的問題是關於一些有點不同的問題。鏈接到綜合資源的巨大榮譽,我有幾個可以派上用場的例子。我實際上對「合成」或「模擬」資源的概念以及如何利用這一概念感到好奇。 – Brodie
現在我很好奇。我誤解了你的問題? – ryanlunka
我很好奇爲什麼 和 使用myRes/altView.jsp進行渲染,即使在檢查RequestPathInfo對象時,cq:include也將altView作爲擴展名,但sling:include將其包含在選擇器列表中。我很好奇cq:include是否做了一些特別的事情。不過,我認爲我正在失去一個事實,即選擇器和擴展在使用它們來定位某個jsp進行渲染時是有效的。 (對不起,這很適合評論) –
Brodie