重写Adobe CQ Image src属性

时间:2015-05-20 10:49:45

标签: cq5 aem sling

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

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

我尝试将<img>元素添加到Link Checker Transformer配置中,方法是将其添加到“重写元素”列表中 img:src

enter image description here

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

即使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;
    }

}

希望这有助于他人。以下是一些参考文献: