重写 Adob​​e CQ Image src 属性

Rewrite Adobe CQ Image src attribute

在 AEM 中,页面和图像等内容包含 '/content/' 前缀。我们可以通过 Link Checker Transformer 配置和 resourceResolver.map() 方法重写这些 url。正在为 HTML 元素 <a><form> 重写 URL。

但我希望它也适用于 <img> 个元素。

我尝试将 <img> 元素添加到 Link Checker Transformer 配置中,方法是将其作为 img:src[=34 添加到 'Rewrite Elements' 列表中=]:

我也检查了 What am I missing for this CQ5/AEM URL rewriting scenario? 的答案,但两次尝试都没有解决这个问题。

有什么办法吗?

即使 rewriterLink Checker Transformer 不起作用。我通过 TransformerTransformerFactory 接口使用了自定义 LinkRewriter。我的代码基于 Adobe 中的样本。我得出了这样的结论:

@Component(
     metatype = true,
     label = "Image Link Rewriter",
     description = "Maps the <img> elements src attributes"
)
@Service(value = TransformerFactory.class)
@Property(value = "global", propertyPrivate = true)
public class ImageLinkRewriter implements Transformer, TransformerFactory {

    // some variables

    public CustomLinkTransformer() {  }

    @Override
    public void init(ProcessingContext context,
                     ProcessingComponentConfiguration config) throws IOException {
        // initializations here
    }

    @Override
    public final Transformer createTransformer() {
        return new CustomLinkTransformer();
    }

    @Override
    public void startElement(String uri, String localName, 
                             String qName, Attributes atts) throws SAXException {
        if ("img".equalsIgnoreCase(localName)) {
            contentHandler.startElement(uri, localName, qName, rewriteImageLink(atts));
        }
    }

    private Attributes rewriteImageLink(Attributes attrs) {
        String attrName = "src";
        AttributesImpl result = new AttributesImpl(attrs);

        String link = attrs.getValue(attrName);
        String mappedLink = resource.getResourceResolver().map(request, link);

        result.setValue(result.getIndex(attrName), mappedLink);

        return result;
    }

}

希望这对其他人有帮助。以下是一些参考资料: