[RESOLVIDO] Managed Bean com @Named não é encontrado na view

Estou migrando meus managed beans para CDI (@Named) ao invés do @ManagedBean pra poder usar interceptadores nos métodos. (ManagedBeans não suporta os interceptors da CDI)
O restante do projeto já usa a CDI e funciona normalmente. Só os Managed Beans não estão no controle da CDI.

Porém os managed beans que mudei para @Named não são encontrandos nas telas.
Já coloquei o arquivo beans.xml vazio dentro da pasta WEB-INF, tentei também dentro do META-INF, solto dentro da pasta classes também… e nada… sempre da o mesmo erro:

No caso parece que ele reclama que não encontra a baseController

que eu tenho:
BaseController.java

@Named
public class BaseController implements Serializable {

	public String getLanguage() {
		...
	}
}

O projeto é um .war e roda no JBoss 7.1.1
Este managed bean funciona normalmente com @ManagedBean… porém para de funcionar quando troco por @Named

alguém sabe o que to fazendo de errado?

valeu!

ta errado mesmo

@ManagedBean @SessionScope public class BaseController implements Serializable {

mas é justamente isso que quero fazer

trocar o @ManagedBean por @Named

vc tem essa .jar no seu projeto

weld-osgi-bundle.jar

???

Quando a aplicação é implantada, a presença de um arquivo beans.xml sinaliza que o módulo contém beans gerenciados CDI, para que sejam procuradas anotações CDI nas classes do caminho. Em um módulo CDI, todos os beans são registrados com Weld, e a anotação @Named é utilizada para coincidir os beans com os pontos de injeção.

eu nao tenho o jar no projeto pq ele ja roda no JBoss 7.1.1 que ja tem todos os jars do weld

O conteúdo dentro de @Named é acessado via EL na sua página, então pode ser que para acessar o seu bean seja necessário acessar assim ${BaseController}
ou você pode fazer assim @Named(“baseController”) e acessar ${baseController}

Uma coisa eu tenho certeza o beans.xml em projetos web vai dentro do WEB-INF e em Java-SE ou JEE vai em META-INF…


desse jeito funciona usando Named...

[]s

desse jeito funciona usando Named…

[]s

[quote=ivandasilva]O conteúdo dentro de @Named é acessado via EL na sua página, então pode ser que para acessar o seu bean seja necessário acessar assim ${BaseController}
ou você pode fazer assim @Named(“baseController”) e acessar ${baseController}

Uma coisa eu tenho certeza o beans.xml em projetos web vai dentro do WEB-INF e em Java-SE ou JEE vai em META-INF…[/quote]

tinha pensando nisso também e já testado das duas formas… nenhuma funciona :frowning:

criei um construtor padrão com um System.out.println() dentro e pra minha surpresa o construtor é chamado pelo jboss!
coloquei um breakpoint nele e na pilha de execução ele é chamado pelo Weld que é chamado pelo ELResolver (a tela).

mas estranho que parece que o bean não é criado direito.
o método getLanguage() nunca é chamado (coloquei breakpoint) e um outro método anotado com @PostConstruct também nao é chamado.

muito estranho :S

Posta o seu bean aí…

eu testaria na página também algo do tipo ${baseController eq null}

Se na tela aparecer false, a injeção está funcionado e o problema pode ser com o seu objeto.

troca a anotação @named por @model e faz um teste

outra coisa em jsf2 usa-se a EL com #, $ é so em jsp

Achei o problema!

meu método BaseController.getLanguage() tinha essa linha que dava pau:

FacesContext.getCurrentInstance().getViewRoot().setLocale( new Locale( language ) );

removi e funcionou!

dbdbdb, bota o post como resolvido…

[quote=marcelo.silva.java]ta errado mesmo

@ManagedBean @SessionScope public class BaseController implements Serializable { [/quote]

Saindo um pouco do contexto da discussão, mas tirando uma dúvida minha, por que eu devo fazer implements em Serializable neste caso em que foi usado o CDI ?