[英]Idiomatic way to overcome difficulties with `@extension = 'html'` in AEM 6.3 Sightly/HTL?
AEM的HTL(fka Sightly)具有用於重新格式化URL屬性的特殊用法,例如
<a href="${properties.path @ extension = 'html'}">
這個成語的目的是雙重的
.html
附加到通過pathbrowser
字段創作的內部鏈接 /content/projectname
資源映射 不幸的是,這個精心設計的功能有幾個問題:
.html
結尾的外部鏈接。 我的團隊現在的任務是修復由於過度使用此extension = 'html'
技巧而導致的許多缺陷,我們希望以最小的回歸風險一致,快速地修復所有缺陷。
是否有快速解決方案,最好是可以通過無意識搜索/替換每次出現的extension = 'html'
重復進行extension = 'html'
?
我可以建議結合使用uri上下文和從服務器端向資源URL添加.html擴展名。
使用@ context = 'uri'
, href
和src
屬性的默認上下文,並且不顯式添加.html
擴展名。
輸入 -
<a href="${'/content/dam/repl/en.pdf'}">Resource Link</a>
使用默認的uri上下文。
輸出 -
<a href="/content/dam/repl/en.pdf">Resource Link</a>
在任何其他html屬性上,使用屬性上下文- @ context='attribute'
輸入 -
<div data-link="${'/content/dam/repl/en.pdf' @ context='attribute'}"/>
輸出 -
<div data-link="/content/dam/repl/en.pdf"/>
再次使用@ context = 'uri'
,不會在URL中轉義& ,也可以與選擇器和#參數一起使用。 增加了XSS保護的優勢。
輸入 -
<a href="${'http://www.reddit.com.selector1.selector2?a=1&b=2&c=3'}">URI context</a>
輸出 -
<a href="http://www.reddit.com.selector1.selector2?a=1&b=2&c=3">URI context</a>
您不能在同一元素中同時使用@ extension和@ context。 您可以像這樣<a href="${path}.html">Title</a>
附加.html,或者更好的方法是在吊索模型級別解決此問題,也許是一種util方法。
public static String getUrl(String link, String extension, ResourceResolver resourceResolver) {
String updatedLink = "";
if (link != null) {
Resource pathResource = resourceResolver.getResource(link);
// check if resource exists
if (pathResource != null) {
// append .html
updatedLink = resourceResolver.map(link) + extension;
}
}
return updatedLink;
}
旁注:出於明顯原因,避免使用@ context='unsafe'
unsafe'-完全禁用xss保護。
選中此選項以獲取可用的上下文表達式選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.