JSF - Managed Bean

14 respostas
anderson.bonavides

Galera to com o segunte problema. Tenho um formulário onde tento cadastrar um usuário e vejo que o método cadastrarUsuario do meu Managed Bean não está nem executando. Alguém pode me informar o porque do problema?

Segue meu html e minha classe:

html

<h:form> . . . <h:commandButton action="#{usuario.cadastrarUsuario}" value="Cadastrar" /> </h:panelGrid> </h:form>

Managed Bean

public class UsuarioMB {
	
	public enum Tipo{Cliente, Gerente, Desenvolvedor};
	private String nome;
	private String telefone;
	private String email;
	private String login;
	private String senha;
	protected Tipo tipo;
				.
				.
				.

	public String cadastrarUsuario(){
		
		BaseDao<Usuario> dao = new BaseDao<Usuario>();
		Usuario user = new Usuario();
		user.setNome(this.nome);
		user.setTelefone(this.telefone);
		user.setEmail(this.email);
		user.setLogin(this.login);
		user.setSenha(this.senha);
		user.setTipo(this.tipo);
		dao.create(user);
		
		return "sucesso";
	}
}

14 Respostas

TeiTei

coloca o seu web.xml ai e o faces-config.xml

anderson.bonavides

WEB.XML

<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<display-name>JampaSoftwareDevelopment</display-name>
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	
	<listener>
		<listener-class>
			com.sun.faces.config.ConfigureListener
		</listener-class>
	</listener>
	
	<!-- Faces Servlet -->
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<!-- Faces Servlet Mapping -->
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<login-config>
		<auth-method>BASIC</auth-method>
	</login-config>
	
	<!-- Configuração do facelets -->
	<context-param>
		<param-name>javax.faces.DEFAULT_SUFIX</param-name>
		<param-value>.xhtml</param-value>
	</context-param>
	
	
</web-app>

faces-config.xml

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
	<managed-bean>
		<managed-bean-name>usuario</managed-bean-name>
		<managed-bean-class>
			br.com.jampasoftwaredevelopment.view.UsuarioMB
		</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
	<!-- Navegação de páginas -->
	<navigation-rule>
		<from-view-id>/jsp/home.jsp</from-view-id>
		<navigation-case>
			<from-outcome>cliente</from-outcome>
			<to-view-id>/jsp/cliente.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>gerente</from-outcome>
			<to-view-id>/jsp/gerente.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>desenvolvedor</from-outcome>
			<to-view-id>/jsp/desenvolvedor.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	<!-- Mensagens de validação -->
	<application>
		<locale-config>
			<supported-locale>pt_BR</supported-locale>
		</locale-config>
		<message-bundle>
			br.com.jampasoftwaredevelopment.messages.mensagens
		</message-bundle>
	</application>
</faces-config>
F

Aconteceu isso comigo esta semana… não entendi o porque, mas quando eu coloquei o MBean no escopo de sessão funcionou.
somente no escopo de request que não.

tente ai.

sfing

Esta rodando no tomcat 5, se for o caso mude para o 6 !

Lord

Cara faz o seguinte … muda o escopo do seu Managed Bean de “request” para “session”, dai vai funcionar…

Só uma dica quando vc for trabalhar com páginas estaticas, vc utiliza o ecopo “request”, mas quando vc tem interação com o cliente vc usa o escopo “session”…

flw …

Luiz_Aguiar

veja o a4j:keepAlive quando for utilizar seus MB em modo request, ele pode te ajudar.

anderson.bonavides

sfing o tomcat é o 6.

Lord:
Cara faz o seguinte … muda o escopo do seu Managed Bean de “request” para “session”, dai vai funcionar…

Só uma dica quando vc for trabalhar com páginas estaticas, vc utiliza o ecopo “request”, mas quando vc tem interação com o cliente vc usa o escopo “session”…

flw …

Também não funcionou. TEntei com request, com session, com aplication e com none.

:frowning:

rponte

Você colocou o componente h:messages para ver se não está ocorrendo nenhum erro de conversão ou validação? É provável que você não tenha colocado o componente e esteja ocorrendo o erro, daí como não é exibido o erro você pensa que é outro problema!

Olha ae.
Abraços.

anderson.bonavides

Bem, no console não aparece nada.
Mas como sou novo vc poderia me dizer como posso utilizar o h:messages?

anderson.bonavides

realmente tinha um erro de convensão.

muriloagu

Cara eu sei que o pessoal já falou, mas aconteceu o mesmo comigo e eu resolvi colocando o escopo como session … dai dei um build-clean e rodou …

valeu

anderson.bonavides

Depois de corrigido o erro aconteceu outro na linha 3.

:(

public String cadastrarUsuario(){

		BaseDao<Usuario> dao = new BaseDao<Usuario>(); 
		
		Usuario user = new Usuario();
		user.setNome(this.nome);
		user.setTelefone(this.telefone);
		user.setEmail(this.email);
		user.setLogin(this.login);
		user.setSenha(this.senha);
		user.setTipo(this.tipo);

		dao.create(user);
	
		return "sucesso";
	}

Segue 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: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:225)

root cause

javax.faces.FacesException: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
javax.faces.component.UICommand.broadcast(UICommand.java:332)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:268)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

root cause

javax.faces.el.EvaluationException: java.lang.NullPointerException
com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:150)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92)
javax.faces.component.UICommand.broadcast(UICommand.java:332)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:268)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

root cause

java.lang.NullPointerException
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:120)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
br.com.jampasoftwaredevelopment.persistence.BaseDao.(BaseDao.java:12)
br.com.jampasoftwaredevelopment.view.UsuarioMB.cadastrarUsuario(UsuarioMB.java:89)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92)
javax.faces.component.UICommand.broadcast(UICommand.java:332)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:268)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

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

muriloagu

Trecho da classe DAO:

public Usuario1 getUsuario() { if(usuario== null){ usuario = new Usuario1(); return usuario; }else{ return usuario; } }

Bom no meu caso aconteceu exatamente a mesma coisa… soh que foi quando eu recuperava alguma propriedade da minha classe DAO que é tb um objeto tipo esse ai em cima tive que colocar alguns ifs assim em alguns lugares e resolveu na moral…

Treço de um facelets:

<h:inputText value="#{usuarioDAO.usuario.codigo}" size="30" id="codigo" requiredMessage="Campo código é Obrigatório."/> <br/>

o primeiro codigo resolveu esse mesmo erro seu para a chamada acima … okss

valeu :lol:

anderson.bonavides

O problema é que sua classe Dao especifica um usuario já a minha utiliza genéricos.

Mas to tentando fazer aki pra ver oq da!

Criado 2 de maio de 2008
Ultima resposta 2 de mai. de 2008
Respostas 14
Participantes 8