从 CQ5 中的 jcr 节点获取 html 输出

Get html output from a jcr node in CQ5

我想知道是否有一种方法可以在不触及实际 url 的情况下获取 CQ5 中页面节点的渲染 HTML 输出。我有页面节点,我想以编程方式在 java 中获取该页面节点的呈现 HTML 输出,并将其存储在字符串中而不点击页面 URL.

感谢任何帮助,提前致谢!

您可以通过提供正确的视图来访问节点。当您需要呈现 html 视图时,请将 .html 与您的节点一起使用以呈现 html。所以你的节点路径将是

/content/path/to/page/jcr:content/par/node_name.html

现在要以编程方式阅读 html,您可以从您的路径向上述路径发出 http 请求,并将响应保存为字符串。

节点本身就是一个数据。负责呈现此数据的 Sling 框架。它使用一系列规则来确定应如何呈现这些数据。Sling Script Resolution Cheet Sheet 由于 Sling 是 Web 框架,它通过 http 请求呈现数据。

要在 CQ/AEM 中模拟此请求,我建议使用 com.day.cq.contentsync.handler.util.RequestResponseFactory 服务

import org.apache.sling.engine.SlingRequestProcessor;
import com.day.cq.contentsync.handler.util.RequestResponseFactory;

@Reference
private RequestResponseFactory requestResponseFactory;

@Reference
private SlingRequestProcessor requestProcessor;

public String doStuff(){
    HttpServletRequest request = requestResponseFactory.createRequest("GET", "/path/to/your/node.html");
    request.setAttribute(WCMMode.REQUEST_ATTRIBUTE_NAME, WCMMode.DISABLED);

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    HttpServletResponse response = requestResponseFactory.createResponse(out);

    requestProcessor.processRequest(request, response, resourceResolver);        
    return out.toString(response.getCharacterEncoding());
}

希望对您有所帮助。