我想知道是否有办法在CQ5中获取页面节点的呈现HTML输出而不会访问实际的URL。我有Page节点,我想在java中以编程方式获取该页面节点的呈现HTML输出,并将其存储在字符串中,而不会访问页面URL。
感谢任何帮助,提前谢谢!
答案 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请求,并将响应保存为字符串。