Caramba, acho que você faltou à aula de como funciona uma aplicação web, né?
Lembre-se, o que o cliente vê, independente de qual tecnologia você tenha no backend, é, apenas, HTML + JS + CSS.
Logo, você teria que ter implementado algo para que, quando clicasse no botão, o BROWSER do cliente baixasse o relatório, armazenasse em memória ou em um local SEM QUE O CLIENTE VEJA, execute um script para identificar as impressoras instaladas e enviar o comando de impressão do arquivo para uma delas (a padrão do sistema? Pode ser).
O que ocorre é que, quando você clica em algo na página de tua aplicação JSF e esse algo tem uma ação associada, essa ação será executada NO SERVIDOR e não na máquina do cliente (salvo se há um javascript para isso).
E, óbvio que na IDE vai funcionar, ela está rodando em tua máquina.