JSF - Declaração de tipos

22 respostas
anderson.bonavides

Pessoal tenho um usuario declarado como private no meu Managed bean.

public class UsuarioMB {
	
	private String nome;
	private String telefone;
	private String email;
	private String login;
	private String senha;
	private String tipo;
	private Usuario user;
	
	.
	.
	.
	
}
Preciso declarar ele no meu faces-confing.xml assim como os outros atributos?

Caso sim como ficaria?

Grato.

22 Respostas

V

Não cara…

no faces-config vc vai declarar a classe que contém esses atributos. Aí o acesso aos mesmos será feito através de métodos…

ou seja…

lá no faces-config.xml

<managed-bean>
   <managed-bean-name>Usuario</managed-bean-name>
   <managed-bean-class>seuPackage.UsuarioMB</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Aí, caso você queira, em um textField, por exemplo, recuperar o valor de um método do seu atributo do tipo Usuário, você faria assim (no atributo ‘value’ do TextField)

#{Usuario.user.nome}

Com isso, vc estaria acessando o método getUser(), que retorna o seu atributo “user” e, através do retorno desse método, vc acessa o método getNome(), que está definido lá na classe Usuario, por exemplo…

Espero ter colaborado de alguma forma…

anderson.bonavides

Então quer dizer que a configuração do meu managed bean não ficaria desta forma?

<managed-bean> <managed-bean-name>usuario</managed-bean-name> <managed-bean-class> br.com.jampasoftwaredevelopment.view.UsuarioMB </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>email</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>login</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>nome</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>senha</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>telefone</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>tipo</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> </managed-bean>

E sim desta?

<managed-bean> <managed-bean-name>usuario</managed-bean-name> <managed-bean-class> br.com.jampasoftwaredevelopment.view.UsuarioMB </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

V

Exatamente…

Tem que ficar desta forma mesmo…
Aí quando você for acessar um atributo ou método do seu managed bean, vc faz daquela forma que eu te disse na resposta acima…

anderson.bonavides

Humm entendi
mas lançou a seguinte exceção:

08/05/2008 12:25:55 com.sun.faces.lifecycle.ProcessValidationsPhase execute SEVERE: Error testing property 'nome' in bean of type null javax.faces.el.PropertyNotFoundException: Error testing property 'nome' in bean of type null

JavaSplinter

Cara, vc fez os métodos de acesso nessa sua classe??
O acesso será feito através deles, e não através do atributo em si…

anderson.bonavides

Sim,

Na classe UsuarioMB existe os métodos getr´s e setr´s.

Quer que eu poste o MB pra vc ver?

JavaSplinter

sim…
poste aí para eu ver!

anderson.bonavides
public class UsuarioMB {
	
	private String nome;
	private String telefone;
	private String email;
	private String login;
	private String senha;
	private String tipo;
	private Usuario user;
	
	public UsuarioMB(){
		
	}
	
	
	public UsuarioMB(String nome, String telefone, String email, String login,
			String senha, String tipo, Usuario user) {
		super();
		this.nome = nome;
		this.telefone = telefone;
		this.email = email;
		this.login = login;
		this.senha = senha;
		this.tipo = tipo;
		this.user = user;
	}
	
	
	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}


	public String getTelefone() {
		return telefone;
	}


	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}


	public String getEmail() {
		return email;
	}


	public void setEmail(String email) {
		this.email = email;
	}


	public String getLogin() {
		return login;
	}


	public void setLogin(String login) {
		this.login = login;
	}


	public String getSenha() {
		return senha;
	}


	public void setSenha(String senha) {
		this.senha = senha;
	}


	public String getTipo() {
		return tipo;
	}


	public void setTipo(String tipo) {
		this.tipo = tipo;
	}


	public Usuario getUser() {
		return user;
	}


	public void setUser(Usuario user) {
		this.user = user;
	}


	public String validarUsuario(){
		
		return "gerente";
	}
	
	
	public String cadastrarUsuario(){	
		Operacoes<Usuario> op = new Operacoes<Usuario>();
		op.inserir(user);		
		return "sucesso";
	}
}
JavaSplinter

dei uma olhada por cima e está ok…
na verdade, como vc permite que seja criada uma instância sem passar os parâmtros, o certo seria vc fazer um lazy nos gets, para evitar nullPointer…
isso é só uma observação, pois a exceção é de propertyNotFound
Queria ver onde vc chama esse nome, ou seja, o lugar onde vc tenta recuprar essa propriedade.

V

Olha se você está passando o nome do seu bean corretamente.

Pois, preste atenção na exceção:

javax.faces.el.PropertyNotFoundException: Error testing property 'nome' in bean of type null

Atenção para o IN BEAN OF TYPE NULL… ou seja, ele está procurando um atributo em um bean nulo. Ou seja, ele não está encontrando o seu bean…
Dê uma olhada se a chamada da propriedade está correta

anderson.bonavides
A chamada está como vc citou.
meu form:

<h:outputLabel value="Nome" for="nome">
						<f:verbatim>
							<br />
						</f:verbatim>
						<h:inputText value="#{usuario.user.nome}" id="nome"
							style=" width : 310px;" required="true" />
							<h:message for="nome" />
					</h:outputLabel>
Meu 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>session</managed-bean-scope>
	</managed-bean>

e meu managed bean:

public class UsuarioMB {
	
	private String nome;
	private String telefone;
	private String email;
	private String login;
	private String senha;
	private String tipo;
	private Usuario user;
	
	//construtores e métodos de acessos
	
	
	public String cadastrarUsuario(){	
		Operacoes<Usuario> op = new Operacoes<Usuario>();
		op.inserir(user);		
		return "sucesso";
	}
}
anderson.bonavides

Alguém mais tem uma ideia do que possa ser?

:’(

To nessa enrolado já faz um tempinho.

J

Parece que o problema é a variável user estar nula.

tenta colocar

private Usuario user = new Usuario();

em vez de

private Usuario user;
anderson.bonavides

Continua dando erro.

:frowning:

javax.servlet.ServletException: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException javax.faces.webapp.FacesServlet.service(FacesServlet.java:225)

JavaSplinter

É…pelo visto é o que eu te falei sobre o lazy
O que parece estar ocorrendo é o seguinte:
Como vc está chamando a construtora sem passar os parâmetros, os atributos estão nulos, ou seja, vc não instanciou nenhum deles, apenas os declarou.

A inicialização tardia vai ficar assim

public String getNome(){
    if(this.nome == null)
        this.nome = ""

Parace estranho um new de String…mas coloquei assim pra vc tomar como exemplo para todo e qualquer objeto que necessite do lazy.

A inicialização tardia vai garantir que vc não tenha objetos nulos dentro da sua aplicação. Faça isso nos seus gets e creio que seu problema estará resolvido.

Flw

anderson.bonavides

Ainda ta gerando o mesmo problema não to entendendo muito.

javax.servlet.ServletException: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException javax.faces.webapp.FacesServlet.service(FacesServlet.java:225)

Você acha que seria uma boa matar esse construtor com argumentos?

JavaSplinter

Não precisa tirar esse contrutor não…
Poste aqui o erro que vc tem no console.

anderson.bonavides
SEVERE: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException

javax.faces.FacesException: #{usuario.cadastrarUsuario}: javax.faces.el.EvaluationException: java.lang.NullPointerException

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)

at javax.faces.component.UICommand.broadcast(UICommand.java:332)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:268)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)

Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:150)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92) 19 more

Caused by: java.lang.NullPointerException

at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:120)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27)

at br.com.jampasoftwaredevelopment.persistence.BaseDao.(BaseDao.java:13)

at br.com.jampasoftwaredevelopment.business.Operacoes.inserir(Operacoes.java:9)

at br.com.jampasoftwaredevelopment.view.UsuarioMB.cadastrarUsuario(UsuarioMB.java:125)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146) 20 more

09/05/2008 10:17:53 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet Faces Servlet threw exception

java.lang.NullPointerException

at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:120)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27)

at br.com.jampasoftwaredevelopment.persistence.BaseDao.(BaseDao.java:13)

at br.com.jampasoftwaredevelopment.business.Operacoes.inserir(Operacoes.java:9)

at br.com.jampasoftwaredevelopment.view.UsuarioMB.cadastrarUsuario(UsuarioMB.java:125)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92)

at javax.faces.component.UICommand.broadcast(UICommand.java:332)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:268)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)
JavaSplinter

at br.com.jampasoftwaredevelopment.business.Operacoes.inserir(Operacoes.java:9)
at br.com.jampasoftwaredevelopment.view.UsuarioMB.cadastrarUsuario(UsuarioMB.java:125)

vc fez mesmo o lazy no objeto que está sendo passado aqui?

public Usuario getUser(){
    if (this.user == null)
        this.user = new Usuario(argumentos, quando houver);
    return this.user;

Fez isso???

anderson.bonavides

Eu fiz Usuario(); // SEM ARGUMENTOS.

:frowning:

anderson.bonavides

Na verdade meu construtor Usuarios não tem argumentos. É default.

anderson.bonavides

JavaSplinter

Obrigado pela força. Infelizmente não consegui resolver aki ainda mas vou ficar tentando. De qualquer forma fico muito grato pela ajuda.

Criado 8 de maio de 2008
Ultima resposta 9 de mai. de 2008
Respostas 22
Participantes 4