簡體   English   中英

克服AEM 6.3 Sightly / HTL中的@extension ='html'`困難的慣用方式?

[英]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'}">

這個成語的目的是雙重的

  1. .html附加到通過pathbrowser字段創作的內部鏈接
  2. 應用已配置為剝離/content/projectname資源映射

不幸的是,這個精心設計的功能有幾個問題:

  • 它不適用於資源鏈接,例如DAM中的PDF文件。
  • 它不適用於不以.html結尾的外部鏈接。
  • 它會在包含查詢字符串參數的URL中轉義“&”,從而斷開鏈接。

我的團隊現在的任務是修復由於過度使用此extension = 'html'技巧而導致的許多缺陷,我們希望以最小的回歸風險一致,快速地修復所有缺陷。

是否有快速解決方案,最好是可以通過無意識搜索/替換每次出現的extension = 'html'重復進行extension = 'html'

我可以建議結合使用uri上下文和從服務器端向資源URL添加.html擴展名。

  • 它不適用於資源鏈接,例如DAM中的PDF文件。

使用@ context = 'uri'hrefsrc屬性的默認上下文,並且不顯式添加.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"/>


  • 它不適用於不以.html結尾的外部鏈接。
  • 它會在包含查詢字符串參數的URL中轉義“&”,從而斷開鏈接。

再次使用@ 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>

  • 將.html附加到內部資源URL

您不能在同一元素中同時使用@ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM