Cdi + jsf 2 + glassfish 3.1

Olá pessoal,

Estou fazendo uma implementação, utilizando CDI, JSF 2.0 e glassfish 3.1, porem ao chamar o metodo do bean na view, da erro de como se o indentificador do bean do bean não existe. Alguem pode ajudar por favor? Obrigado.

Meu Bean:


import javax.inject.Named;

@Named
public class Primeira {

	private String nome;
	private String rg;
	
	
	
	public String meuMethod(){
		System.out.print("Nome " + this.nome + " RG " + this.rg );
		return null;
	}



	public String getNome() {
		return nome;
	}



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



	public String getRg() {
		return rg;
	}



	public void setRg(String rg) {
		this.rg = rg;
	}
	
	
	
	
}

Meu arquivo xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
<h:head><title>Meu Teste</title> </h:head>

<h:body>
	<h:form>
	<h:outputLabel value="Nome" />
	<h:inputText value="#{primeira.nome}" />
	
	<h:outputLabel value="Rg" />
	<h:inputText value="#{primeira.meuMethod.rg}" />
	
	<h:commandButton action="#{primeira.meuMethod}" value="envia"/>
	
	
	</h:form>
</h:body>      
      
      
</html>      


Meu Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>testando</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>

ERRO:

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.el.PropertyNotFoundException: /index.xhtml @10,42 value="#{primeira.nome}": Target Unreachable, identifier 'primeira' resolved to null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	at javax.faces.component.UIInput.validate(UIInput.java:960)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at javax.faces.component.UIForm.processValidators(UIForm.java:253)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

posta seu codigo e o erro que está ocorrendo…

t+

cara,

tenta colocar assim, @Named(“primeira”)

no seu xhtml tem um erro,

<h:inputText value="#{primeira.meuMethod.rg}" /> 

deve ficar assim

<h:inputText value="#{primeira.rg}" /> 

t+

[quote=alissonvla]cara,

tenta colocar assim, @Named(“primeira”)

no seu xhtml tem um erro,

<h:inputText value="#{primeira.meuMethod.rg}" /> 

deve ficar assim

<h:inputText value="#{primeira.rg}" /> 

t+[/quote]

Cara, eu coloque como vc havia dito: @Named(“primeira”), apesar que quando vc não especifica um “alias” para a annotations, assume-se que é o nome da classe, certo?

e arrumei o erro no arquivo xhtml, mas o erro continua o mesmo…

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.el.PropertyNotFoundException: /index.xhtml @10,42 value="#{primeira.nome}": Target Unreachable, identifier 'primeira' resolved to null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	at javax.faces.component.UIInput.validate(UIInput.java:960)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at javax.faces.component.UIForm.processValidators(UIForm.java:253)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

tenho um projeto aqui mais simples, que eu fiz para estudar JSF2 e funciona blz, mas coloco as seguintes anotações

@Stateless
@Named(“UsuarioFacade”)
@SessionScoped

t+

[quote=alissonvla]tenho um projeto aqui mais simples, que eu fiz para estudar JSF2 e funciona blz, mas coloco as seguintes anotações

@Stateless
@Named(“UsuarioFacade”)
@SessionScoped

t+[/quote]

Cara, não resolveu, a tela ate renderiza, porem quando clico no botão, que dispara minha action, ai que ocorre o erro.

coloca no retorno do seu metodo o nome de outra tela, acho q vai…

Amigo,

não resolveu o problema fiz que mencionou. Acho que o caminho é outro, olhe o erro por favor…

Target Unreachable, identifier 'primeira' resolved to null 

percebe que ele não esta encontrando o “alias” do bean, mas isso ocorre quando eu disparo a action.

Estou achando que é alguma coisa relacionado ao glassfish, porque, fiz um teste coloquei a annotation @ManagedBean do faces, e tirei @Named, funcionou. Depois deixei a @ManagedBean, coloquei a @Named(“teste”), mudei no arquivo xhtml, de “primeira” como era chamado o bean para teste que é o “alias” que eu dei para o bean, e o mesmo erro ocorreu. Alguem poderia ajudar, por favor.

cara,

so por curiosidade, vc criou o beans.xml?

t+

[quote=alissonvla]cara,

so por curiosidade, vc criou o beans.xml?

t+[/quote]

Não, onde tenho que criar e por que precisa?

vc tem que criar um arquivo beans.xml na pasta WEB-INF com o seguinte conteudo

<?xml version="1.0"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd"/>

da uma lida nesse link ai http://www.andygibson.net/blog/tutorial/getting-started-with-jsf-2-0-and-cdi-in-jee-6-part-1/

t+

[quote=alissonvla]vc tem que criar um arquivo beans.xml na pasta WEB-INF com o seguinte conteudo

<?xml version="1.0"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd"/>

da uma lida nesse link ai http://www.andygibson.net/blog/tutorial/getting-started-with-jsf-2-0-and-cdi-in-jee-6-part-1/

t+[/quote]

Cara, eu li o artigo, entendi a necessidade desse arquivo, criei, coloquei as informações que vc disse, depois tirei dexei declarado somente

<?xml version="1.0" encoding="UTF-8"?>

mas não deu certo o erro continua, poxa o que pode ser hein?

cara,

estranho seu projeto nao funcionar, a unica coisa que eu to vendo de diferente do meu projeto é isso ai no web.xml

<context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>

coloca ai e ve se funciona.

t+

[quote=alissonvla]cara,

estranho seu projeto nao funcionar, a unica coisa que eu to vendo de diferente do meu projeto é isso ai no web.xml

<context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>

coloca ai e ve se funciona.

t+[/quote]

Cara, muitissimo obrigado pela ajuda e paciência, eu criei um projeto do zero, e funcionou, em alguns pontos deixei o code mais enxuto:

Meu Bean

package br.com.estudo_jsf2;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("teste") @RequestScoped
public class MinhaClasse {
	
	private String nome;  
    private String rg;  
      
      
      
    public String meuMethod(){  
        System.out.print("Nome " + this.nome + " RG " + this.rg );  
        return "sucesso";  
    }



	public String getNome() {
		return nome;
	}



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



	public String getRg() {
		return rg;
	}



	public void setRg(String rg) {
		this.rg = rg;
	} 
    
    

}

Meu beans.xml

<?xml version="1.0"?>  
<beans xmlns="http://java.sun.com/xml/ns/javaee"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd"/>  

Meu web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>estudo_jsf2</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>

Meu faces-config

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

<navigation-rule>
	<from-view-id>index.xhtml</from-view-id>
	<navigation-case>
		<from-outcome>sucesso</from-outcome>
		<to-view-id>resposta.xhtml</to-view-id>
	</navigation-case>
</navigation-rule>

</faces-config>

Meu form

<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:h="http://java.sun.com/jsf/html">
<h:head><title>Meu Teste CDI</title></h:head>

<h:body>

<h:form>
	<h:outputLabel value="Nome:" for="nome" />
	<h:inputText id="nome" value="#{teste.nome}" />
	<br/>
	<h:outputLabel value="RG" for="rg"/>
	<h:inputText id="rg" value="#{teste.rg}" />
	
	<h:commandButton value="Enviar"  action="#{teste.meuMethod}"/>

</h:form>

</h:body>
      
</html>      

Tela de retorno

<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:h="http://java.sun.com/jsf/html">
<h:head><title>Resposta CDI</title></h:head>

<h:body>
	<h:outputLabel value="Dados" />
	<h:inputText value="#{teste.nome}" />
</h:body>
 
</html>

Obrigado mesmo.

[]’

boa cara… :lol:
mais uma dica para vc, uma das coisas bacanas do JSF 2 é que vc nao precisa ficar mapeando suas paginas no faces-config, como era na versão 1, no seu metodo meuMetodo vc pode retornar a string resposta.xhtml e apagar o mapeamento no face-config.

espero ter te ajudo.

t+

[quote=alissonvla]boa cara… :lol:
mais uma dica para vc, uma das coisas bacanas do JSF 2 é que vc nao precisa ficar mapeando suas paginas no faces-config, como era na versão 1, no seu metodo meuMetodo vc pode retornar a string resposta.xhtml e apagar o mapeamento no face-config.

espero ter te ajudo.

t+[/quote]

Nossa que otima dica, disso eu não sabia. Você me ajudo muito mesmo, estou lendo a especificação JSR-299, na empresa estamos começando um projeto novo com jsf 2, mas temos projeto com jsf 1.2, então estou tentando embalar a oportunidade do jsf 2 e adicionar ao projeto CDI/weld.

Obrigado. :slight_smile:

Blz, problema resolvido.
Mas, e no primeiro caso, se fosse pra executar um método void?

Pq aqui n consegui fazer funcionar.

Falew.

[quote=UpTheIrons]Blz, problema resolvido.
Mas, e no primeiro caso, se fosse pra executar um método void?

Pq aqui n consegui fazer funcionar.

Falew.[/quote]

Desculpe mas não entendi sua duvida.

Rapah, lendo agora aqui, nem eu entendi q p… q eu fiz.

Fala pessoal,

passei pelo mesmo problema e minha situacao era a seguinte:

eu estava importando o javax.annotation.ManagedBean ao inves do javax.faces.bean.ManagedBean

creio que possa ser o problema da maioria dos usuarios, por isso estou postando aqui.

flw !