在AEM中,页面和图像等内容中包含'/content/'
前缀。我们可以通过 Link Checker Transformer 配置和resourceResolver.map()
方法重写这些网址。正在为HTML元素<a>
和<form>
重写网址。
但我希望它也适用于<img>
元素。
我尝试将<img>
元素添加到Link Checker Transformer配置中,方法是将其添加到“重写元素”列表中 img:src
:
我还检查了 What am I missing for this CQ5/AEM URL rewriting scenario? 的答案,但这两次尝试都无法解决此问题。
有没有办法做到这一点?
答案 0 :(得分:2)
即使rewriter
和Link Checker Transformer
无法正常工作。我使用Transformer
和TransformerFactory
接口使用了自定义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;
}
}
希望这有助于他人。以下是一些参考文献: