JSF 2.0 não funciona com Servlets? [Resolvido]

6 respostas
G

Criei uma servlet chamada “teste” que apenas executa um teste System.out.println(“Funcionou!!”), porém, não funciona.

A aplicação no browser aponta erro de navegação (não foi possível encontrar um caso de navegação). Então, criei um arquivo vazio de nome “teste” que é o mesmo nome da servlet que havia criado. Assim, funcionou sem erros, mas acho que isso está inadequado. Logo, procurei desabilitar a verificação dos casos de navegação alterando javax.faces.PROJECT_STAGE para o valor “Production” em vez de “Development” no web.xml. Assim, pude excluir o arquivo vazio de nome “teste” sem causar o erro de caso de navegação.

No entanto, a servlet parou de funcionar. Não sei o que fazer mais. Já procurei no google e parece que sou o único bocó que teve este problema! Alguém pode me ajudar?

6 Respostas

G

Esqueci de dizer que se uso um “form” na forma simples de html em vez de jsf “h:form”, aí o servlet volta a funcionar. Qual o problema com JSF 2.0 e servlets???

H

Posta o código ai…
Quanto ao caso de navegação, o jsf 2 está um pouco diferente do jsf 1.x
No caso o jsf2 não precisa mais que vc registre os casos de navegação no faces-config, mas se vc o fizer, não existe problema.

Agora vc pode usar anotações para fazer o que o faces-config fazia.
Por exemplo em um managed bean vc coloca o @managedBean, para definir o escopo de sessão @SessionScoped e assim vai.

No caso, pelo que eu entendi, o jsf não está achando lugar nenhum pra te mandar depois de executar a operação.
Crie um jsp, xhtml ou o que achar necessário com o nome de resultado e tente mandar o resultado para essa página…
Ou então poste o codigo para que possamos entender direitinho o que vc está querendo fazer…

Abraço.

L
  1. Como você registrou a Servlet no web.xml?

  2. Como é feita o seu fluxo de navegação? via faces-config.xml? via anotações? Mostre esse trecho de código.

Eu nunca tentei colocar um servlet como to-view-id (é sempre um jsp ou xhtml), talvez tenha algum truque que esteja passando…

G

A minha classe do Servlet é esta:

public class TesteServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { System.out.println("Funcionou"); } finally { out.close(); } } //métodos padrões... }

E no web.xml está assim:

<servlet> <servlet-name>TesteServlet</servlet-name> <servlet-class>servlets.TesteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TesteServlet</servlet-name> <url-pattern>/TesteServlet</url-pattern> </servlet-mapping>

Quer dizer então que se eu tiver um h:commandButton com a action=“TesteServlet” eu devo ter também um arquivo com este mesmo nome do servlet assim “TesteServlet.xhtml”? Se bem que, com um “form” em simples html não exige essa página xhtml para funcionar. Porém, como é que é que deve ser feito??

L

Sim, isso se chama navegação implícita. É assim: se uma action contiver login, vai ser redirecionado para a página /login.xhtml, quando não houver nenhuma configuração para essa action.

Se você estiver usando o form simples, então você não estará usando o JSF, e aí não passa de programação com JSP e Servlet.

É interessante saber o porquê você quer misturar Servlet com JSF, porque isso não costuma ser tranquilo. É melhor se comprometer com um dos dois, ou seja:

Alternativa 1: Transforme o Servlet em um ManagedBean, invocando-o na página como:

<h:commandButton action="#{myManagedBean.printOnLog}"/>

Alternativa 2: Retire qualquer tag de JSF na sua página e trate como uma página JSP normal. Isso consistem em usar um form normal e um botão de submit na forma:

<input type="submit" value="Enviar"/>
G

Ok, obrigado!

Criado 14 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 6
Participantes 3