Я не знаю, можете ли вы написать новый рендер, но у меня была похожая проблема с ответом на XML-результат.
В моем случае я взял HttpOutputStream в бэк-бине и написал XML.Возможно, если вы пропустите функцию close и ctx.responseComplete () из моего примера, JSF обычно записывает свой ответ в поток.
FacesContext ctx = FacesContext.getCurrentInstance();
final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();
ctx.responseComplete();