Como posso usar tags JSF dentro de um Servlet?

Oi Pessoal!

Tudo bem?

Estou trabalhando com JSF e servlets. Preciso construir um servlet que utiliza JSF tags para gerar uma página. Preciso fazer isso em servlet e não JSP porque depois vou precisar criar outras classes que estendem esse servlet. Quero poder fazer algo do tipo:

PrintWriter out = response.getWriter();
out.println( “<h:outputText value=“Some Text” />” );

Mas usar tags JSF no out.println não funciona, pois a página gerada fica em branco. Acho que é porque a página resultante de um servlet deve ser somente HTML.

Como posso usar tags JSF dentro de um servelt? Pensei também em usar as classes da biblioteca javax.faces.components.html. Mas se eu fizer isso, tem como eu obter de um componente dessa biblioteca o seu código html correspondente para poder inseri-lo dentro do out.println()?

Obrigado.

Má notícia, você não pode fazer isso. Talvez até desse se instanciasse à mão as classes Html* do Faces, e com alguma macumba gerasse a página. Mas, meu, nem tenta.

Qual a vantagem disso? Você precisa de templates, coisa que o framework Tiles resolve.

[quote=matheusroxtar]Quero poder fazer algo do tipo:

PrintWriter out = response.getWriter();
out.println( “<h:outputText value=“Some Text” />” );

Mas usar tags JSF no out.println não funciona, pois a página gerada fica em branco. Acho que é porque a página resultante de um servlet deve ser somente HTML.[/quote]

Querer não é poder. Esse jeito não funciona porque tudo que se coloca no out é mostrado diretamente para o usuário, sem nenhum processamento adicional. Não é verdade que a saída resultante de um servlet deva ser HTML, é apenas a configuração padrão. Você pode mudar o mime-type para retornar PDF, XML, arquivo texto, imagem, o que você quiser.

Cheguei a pensar em instanciar os componentes também, mas eles não funcionam sozinho, dependem da engine do Faces. Portanto, não tentaria essa abordagem.

realmente usar as tags do jsf no servlet e tentar recuperar o html é reinventar a roda (não criticando, mas apenas enfatizando que vc não precisa fazer isso)

vc pode criar campos dinâmicos na tela sem problema, no seu bean crie os campos, tenha um panel ou panel grid setada a propriedade binding para uma variavel no seu bean e vai alimentando na propriedade getChildren, desta váriavel e coloque os componentes.

porem, se vc realmente, realmente mesmo, quiser usar o código html dos componentes se conect na página com a classe URL e puxe o html, ai é só printar a informação no seu servlet

http://www.exampledepot.com/egs/java.net/ReadFromURL.html

Obrigado pessoal! Eu realmente queria fazer um servlet que gerasse formulários genéricos. Aí depois pudesse ser estendido para gerar formulários específicos. E isso não é possível com JSP, pois não existe herança de arquivo web (html, jsp). E ficar copiando e alterando os arquivos para simular isso não acho que seria muito legal. Mas mesmo assim obrigado. Vou tentar outras alternativas.