Javax.servlet.ServletException: Tentativa ilegal de definir ViewHandle [resolvido]

5 respostas
L

Pessoal,

Primeiramente eu fiz minha aplicação usando somente JSF e Hibernate então estava funcionando normal. Mas agora estou tentando usar o richfaces e esta aparecendo uma mensagem de erro. Estou procurando na net sobre essa mensagem mas não acho em lugar algum falando sobre o mesmo.
Obs: Estou usando JSF 2.0, Hibernate, Richfaces 3.3.3 e Tomcat 6.0.

As aterações que eu fiz para usar o richfaces foram:

Adicionar as libs:
richfaces-api-3.3.3.Final.jar
richfaces-impl-3.3.3.Final.jar
richfaces-ui-3.3.3.Final.jar
Obs: Não sei se tenho que incluir a lib richfaces-impl-jsf2-3.3.3.Final.jar, porém já testei com e sem esse lib e não funciona mesmo.

criar a página helloRich.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Insert title here</title>
	</head>
	<body>
		<f:view>
			<h:form> 
				<rich:panel header="Ola RichFaces" style="width: 300px">
					<h:outputText value="Seu nome: " />
					<h:inputText value="#{helloRichBean.nome}"/>
					<a4j:commandButton value="Dizer ola" reRender="olaPainel" />
					
					<h:panelGroup id="olaPainel" layout="block">
						<h:outputText value="Ola, " rendered="#{not empty helloRichBean.nome}" />
						<h:outputText value="#{helloRichBean.nome}" /> 
						<h:outputText value="!" rendered="#{not empty helloRichBean.nome}" />
					</h:panelGroup>
				</rich:panel>
			</h:form>
		</f:view>
	</body>
</html>
Criar o HelloRichBean.java:
package appjsf_sistemafinanceiro.visao;

public class HelloRichBean {
	private String nome = null;

	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
}
Registrar o Bean no faces-config.xml:
<managed-bean>
  <managed-bean-name>helloRichBean</managed-bean-name>
  <managed-bean-class>appjsf_sistemafinanceiro.visao.HelloRichBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>

Se alguem poder me ajudar eu agradeço.

Erro:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Tentativa ilegal de definir ViewHandler depois de uma resposta ter sido renderizada.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)

root cause

java.lang.IllegalStateException: Tentativa ilegal de definir ViewHandler depois de uma resposta ter sido renderizada.
com.sun.faces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:562)
org.ajax4jsf.event.InitPhaseListener.beforePhase(InitPhaseListener.java:92)
com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs.

5 Respostas

L

– RESOLVIDO –

Basta acrescentar algumas tags nos seus arquivos de configuração.

Arquivo: web.xml
Acrescentar:

<context-param> <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> <param-value>com.sun.facelets.FaceletViewHandler</param-value> </context-param>

=================

Arquivo: faces-config.xml
Acrescentar:

<application> <view-handler>org.ajax4jsf.application.AjaxViewHandler</view-handler> </application>

até 8)

C

vc definiu algum viewHandler no seu faces-config.xml?

Posta o seu web.xml pra gente.

C

blz…

Sucesso!!!

L

Ahh outra coisa. No tópico que eu postei além do erro que esta acontecendo eu estava com dúvida em qual lib de richfaces-impl eu deveria usar, se era a richfaces-impl-3.3.3.Final.jar ou richfaces-impl-jsf2-3.3.3.Final.jar. Então atráves do link http://community.jboss.org/wiki/RichFaces333andJSF20 eu achei a solução para o meu problema e também descobri que eu deveria utilizar a lib richfaces-impl-jsf2-3.3.3.Final.jar ao invés da lib richfaces-impl-3.3.3.Final.jar.

Abaixo esta meu arquivo web.xml e faces-config.xml para deixar mais claro:

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>AppJsf_sistemaFinanceiro</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet><servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <context-param> <param-name>org.richfaces.SKIN</param-name> <param-value>blueSky</param-value> </context-param> <context-param> <param-name>org.richfaces.CONTROL_SKINNING</param-name> <param-value>enable</param-value> </context-param> <context-param> <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> <param-value>com.sun.facelets.FaceletViewHandler</param-value> </context-param> <filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>richfaces</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> </web-app>

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <converter> <converter-for-class>java.lang.Enum</converter-for-class> <converter-class>appjsf_sistemafinanceiro.conversores.EnumConverter</converter-class> </converter> <converter> <converter-for-class>appjsf_sistemafinanceiro.dominio.Pessoa</converter-for-class> <converter-class>appjsf_sistemafinanceiro.conversores.PessoaConverter</converter-class> </converter> <managed-bean> <managed-bean-name>cadastroContaBean</managed-bean-name> <managed-bean-class>appjsf_sistemafinanceiro.visao.CadastroContaBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>consultaContaBean</managed-bean-name> <managed-bean-class>appjsf_sistemafinanceiro.visao.ConsultaContaBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>helloRichBean</managed-bean-name> <managed-bean-class>appjsf_sistemafinanceiro.visao.HelloRichBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <navigation-case> <from-outcome>cadastroConta</from-outcome> <to-view-id>/contas/cadastroConta.jsf</to-view-id> </navigation-case> <navigation-case> <from-outcome>consultaConta</from-outcome> <to-view-id>/contas/consultaConta.jsf</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <navigation-case> <from-outcome>menu</from-outcome> <to-view-id>/menu.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> <application> <message-bundle>appjsf_sistemafinanceiro.recursos.messages</message-bundle> </application> <application> <view-handler>org.ajax4jsf.application.AjaxViewHandler</view-handler> </application> </faces-config>

Até 8)

M

O estranho é que seu faces-config.xml tá do jsf 1.2.
É assim mesmo?

Criado 10 de março de 2011
Ultima resposta 22 de mar. de 2011
Respostas 5
Participantes 3