JSF - Problemas com escopo

Salve pessoal!!

Seguinte, estou desenvolvendo uma aplicação usando JSF, e realmente mto massa…

O problema que encontrei está relacionado com os escopos de trabalho do JSF (não do jsf necessariamente, mas sim do ambiente mesmo)… request, session e application.

Sempre usei tudo na sessão, com struts… mas com jsf da pra fazer coisa melhor…

Meu mbean(UsuarioController) está no escopo request e tem um usuarioList List com os usuarios, e usuarioSelecionado…

Tenho uma jsp com uma tabela de listagem de usuarios clico em uma linha da tabela, passo por um listener, seto o usuarioSelecionado e populo um form na mesma pagina… massa tudo 100%…

Edito e clico em gravar… ao clicar em gravar vem a blz do erro: javax.faces.el.PropertyNotFoundException: Error testing property ‘nome’ in bean of type null

O meu bean usuario realmente está nulo, tudo bem… o usuarioSelecionado está nulo… mas pra resolver esse problema só deixando o mbean no session???

Alguém tem alguma idéia de como resolver isso???

Valeu pessoal e até!!

Mande o codigo do seu bean ai.

Esse é o mbean… que está em request…

[code]package server.web.controller;

import com.sun.data.provider.impl.ObjectListDataProvider;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import server.model.empresa.Empresa;
import server.model.empresa.EmpresaDAO;

public class EmpresasController {
private Empresa empresa;
private String parameterId;

public EmpresasController() { }

public Empresa getEmpresa() { return empresa; }
public void setEmpresa(Empresa empresa) { this.empresa = empresa; }

public String getParameterId() { return parameterId; }
public void setParameterId(String parameterId) { this.parameterId = parameterId; }

public void empresaSelectListener(javax.faces.event.ActionEvent actionEvent) throws Exception {
	if(parameterId != null) {
		try {
			empresa = EmpresaDAO.getById(new Integer(parameterId));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

public ObjectListDataProvider getEmpresasProvider() throws Exception {
	ObjectListDataProvider provider = new ObjectListDataProvider();
	
	provider.setList(EmpresaDAO.listAll());
	provider.setObjectType(Empresa.class);
	
	return provider;
}

public void actionSave(javax.faces.event.ActionEvent actionEvent) throws Exception {
	if(empresa != null) {
		System.out.println("ID: " + empresa.getId());
		System.out.println("ID: " + empresa.getSCodEmpresa());
	} else {
		System.out.println("NULLLLLLLL");
	}
}

}[/code]

como está seu faces config?

<managed-bean> <managed-bean-name>EmpresaController</managed-bean-name> <managed-bean-class>server.web.controller.EmpresasController</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>

Cara… eu acho que o problema não está com o código…

Pessoal ninguém mais teve esse problema???

Rapaz isso é classico,
coloca um construtor e faz assim

public EmpresasController (){
 empresa = new Empresa();
}

ele ta tentando instanciar um atributo de um objeto que esta null.

Lembre sempre disso, pois ja perdi muito tempo com isso
quando for usar um obeto tenha certeza que o mesmo esta instanciado.
:smiley:

Arre… alguém!!! hehehe

Valeu afamorim!!! :slight_smile:

Então cara… isso resolveria o problema… em partes…

Tem alguns lugares na JSP que verifico se a empresa é null ou não e faço alguma ação…

Por exemplo:

<ui:button text="Salvar" style="width: 100%" disabled="#{EmpresaController.empresa == null}" />
Nesse caso só habilito a empresa se o cara escolheu uma…
No controller tb criei um método actionNew, neste método eu faço empresa = new Empresa(), neste código o cara clicou em “Nova Empresa”

Ai é o problema de eu iniciar a empresa no construtor… seria melhor controlar essa seleção por outra variavel? Não seria meio “estranho” ??

Não é estranho, pois é uma regra da interface, então vc vai criar uma variavel no seu pagebean para atender essa regra dessa tela.