JSF - faces-config gerando erro

4 respostas
C

Olá, boa tarde. Tenho 2 managed-beans no meu faces config, um para Fornecedor e outro para ContaPagar (FJ-26). Quando adiciono

<managed-bean> <Managed-bean-name>contaPagarHandler</managed-bean-name> <managed-bean-class>fj26.COntaPagarHandler</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>

(passo já feito com sucesso para o FornecedorHandler), dá o erro:

Caanot convert #{requestScope.sessao{ of type class java.lang.String to interface org.hibernate.Session

Como dito, este mesmo passo foi executado para o FornecedroHandler e funcionou. Sem este managed-bean, a aplicação passa desta fase sem erro - dá um outro erro posterior mas que deve ser porque eu retirei esta parte do XML.

Alguma dica? (estou seguindo FJ26)

4 Respostas

dev.rafael

Eu bem poderia ler a apostila só para identificar o exercício que vc está tentando implementar
e então poder ajuda-lo mas, kra na boa, eu não vou fazer isso não. De fato me parece que o
erro não está no seu faces-config.xml mas sim na sua classe fj26.COntaPagarHandler.
Se vc puder postar algum código extra eu posso tentar localizar o erro.

LPJava

mude se request para session scope do seu seu managed-bean.

C

Olá, bom dia. Mudei para session porém o erro persistiu. Segue mais código:

ContaPagarHandler

public class ContaPagarHandler {
	
	private ContaPagar contaPagar = new ContaPagar();
	//private List<ContaPagar> contas = new ArrayList<ContaPagar>();
	//private long count = 0L;
	private HtmlSelectOneMenu fornecedorSelecionado;
	
	private Dao<ContaPagar> contaPagarDao;
	private Dao<Fornecedor> fornecedorDao;
	
	public void setSessao(Session session){
		this.contaPagarDao = new Dao<ContaPagar>(session,ContaPagar.class);
		this.fornecedorDao = new Dao<Fornecedor>(session,Fornecedor.class);
	}
	
	private FornecedorHandler pegaFornecedorHandler(){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
			ELContext elContext = facesContext.getELContext();
			ELResolver resolver = facesContext.getApplication().getELResolver();
			Object fh = resolver.getValue(elContext, null, "fornecedorHandler");
			
			return (FornecedorHandler) fh;
	}
	
	public List<SelectItem> getFornecedoresParaComboBox(){
		
		List<Fornecedor> fornecedores = this.fornecedorDao.list();
		List<SelectItem> lista = new ArrayList<SelectItem>();
		
		//FornecedorHandler handler = pegaFornecedorHandler();
		for(Fornecedor f : fornecedores){
			lista.add(new SelectItem(f.getId(), f.getNome()));
		}
		return lista;
	}
	
	public String salva(ActionEvent event){
		
		System.out.println("gravando conta: " + contaPagar.getDescricao());
		System.out.println("pago: " + contaPagar.isPago());
		
		Long id = Long.valueOf(fornecedorSelecionado.getValue().toString());
		Fornecedor f = this.fornecedorDao.load(id);
		
		contaPagar.setFornecedor(f);
		
		System.out.println("fornecedor: " + contaPagar.getFornecedor().getNome());
		
		this.contaPagarDao.save(contaPagar);
		contaPagar = new ContaPagar();
		return "sucesso";
	}
	
	public ContaPagar getContaPagar() {
		return contaPagar;
	}
	public List<ContaPagar> getContas() {
		return this.contaPagarDao.list();
	}
	

	public HtmlSelectOneMenu getFornecedorSelecionado() {
		return fornecedorSelecionado;
	}

	public void setFornecedorSelecionado(HtmlSelectOneMenu fornecedorSelecionado) {
		this.fornecedorSelecionado = fornecedorSelecionado;
	}
	
}

FornecedorHandler (este funciona sem erro)

public class FornecedorHandler {
	
	private Fornecedor fornecedor =  new Fornecedor();
	//private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
	//private long count = 0L;
	private Dao<Fornecedor> dao;
	
	public void setSessao(Session session){
		
		this.dao = new Dao<Fornecedor>(session, Fornecedor.class);
	}
	
	public String salva(){
		
		System.out.println("Adicionando " + fornecedor.getNome());

		this.dao.merge(this.fornecedor);
		
		this.fornecedor = new Fornecedor();
		return "sucesso";
		
	}
	
	public void escolheFornecedor(ActionEvent event) {
		
		UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("editId");
		Long id = (Long) param.getValue();
		
		this.fornecedor = this.dao.load(id);
	}
	
	public List<Fornecedor> getFornecedores(){
		
		return this.dao.list();
	}
	
//	public Fornecedor getFornecedor() {
	//	
		//System.out.println("Lendo fornecedores #" + fornecedores.size());
		//return fornecedor;
	//}
	
	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}
	
}

Os outros códigos são comuns para o FornecedorHandler e o ContaPagarHandler (daos, hibernateUtil...)

Grato, Carlos.

dev.rafael

Cara, a apostila não está disponivel para download e o código que você passou não parece suficiente.
De qualquer forma, a expressão que você referenciou (#{requestScope.sessao) me parece uma expressão
de inicialização para o método setSessao() registrado para “managed-property”. Nesse caso me parece que
a propriedade “sessao” da sua request não está retornando um objeto Session.
O que fez para colocar o objeto Session como propriedade da request, usou um Filter? Você tem certeza que
a expressão correta não é “sessionScope” ou ainda melhor “applicationScope”?

Caso isso não ajude, por favor poste o seu faces-config.xml e o código da view que está acessando
esses managed beans.

Criado 22 de dezembro de 2009
Ultima resposta 26 de dez. de 2009
Respostas 4
Participantes 3