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

时间:2015-09-21 08:18:49

标签: cq5 jcr sling

我想知道是否有办法在CQ5中获取页面节点的呈现HTML输出而不会访问实际的URL。我有Page节点,我想在java中以编程方式获取该页面节点的呈现HTML输出,并将其存储在字符串中,而不会访问页面URL。

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

2 个答案:

答案 0 :(得分:5)

节点本身它只是一个数据。 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());
}

希望它有所帮助。

答案 1 :(得分:2)

您可以通过提供正确的视图来访问节点。当您需要渲染html视图时,请在您的节点上使用.html来获取渲染的html。所以你的节点路径将是

PresenceOfAllElementsLocatedBy

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