JSF - Problemas com escopo

8 respostas
R

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é!!

8 Respostas

afamorim

Mande o codigo do seu bean ai.

R

Esse é o mbean... que está em request...

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");
		}
	}
}
T

como está seu faces config?

R

<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…

R

Pessoal ninguém mais teve esse problema???

afamorim

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:

R

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” ??

afamorim

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

Criado 10 de julho de 2007
Ultima resposta 14 de jul. de 2007
Respostas 8
Participantes 3