Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Sobre a aula ManagedBeans com CDI e configuração do projeto com Intellij

Prezados, Estou realizando o curso (desde as primeiras versões do curso do jsf) com a IDE Intellij, antes de utilizar o CDI conseguia fazer todo o crud da livraria, mais quando configurei o maven para baixar os cdi não consigo mais listar os autores, a dependencia do mavem no arquivo pom.xml esta assim:

 <properties>
        ... código omitido 
        <weld.servlet.cdi.version>2.4.2.Final</weld.servlet.cdi.version>

</properties>
<dependencies>
     ... código omitido 
<!-- https://mvnrepository.com/artifact/org.jboss.weld.servlet/weld-servlet - CDI-->
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>${weld.servlet.cdi.version}</version>
        </dependency>
</dependencies>

A estrutura do projeto no intellig esta como é mostrado na imagem do link: https://prnt.sc/iikg27

O classe AutorBean o único que foi modificado foram o viewscope, name e a implementação do Serializable, como mostra a imagem: https://prnt.sc/iikh6m

Alguma ideia do que pode estar acontecendo, será que estou esquecendo alguma configuração do intellig? Já tentei mudar o arquivo WEB-INF/beans.xml para dentro de META-INF/beand.xml para estar junto com o persistence.xml mesmo assim, sem sucesso.

Alguma sugestão para poder contornar esse problema?

Desde já agradeço pela atenção prestada.

5 respostas

Fala ai Luis, tudo bem ?

Não devia dar nenhum erro não, usei o intellij para fazer o curso e não tive problemas.

Ele chega a mostrar alguma exception ?

E ai Matheus, blz? então, quando entro na página de autores (onde se faz a listagem) não aparece nenhum erro, agora, quando coloco um valor no input do nome do autor lança o erro:

GRAVE: javax.el.PropertyNotFoundException: /autor.xhtml @29,96 value="#{autorBean.autor.nome}": Target Unreachable, identifier 'autorBean' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
    at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:146)
    at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:176)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
    at javax.faces.component.UIInput.validate(UIInput.java:975)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:575)
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIForm.visitTree(UIForm.java:371)
...

Não esta achando o autorBean, nessa classe onde estou utilizando a annotation:

import javax.faces.view.ViewScoped;
import javax.inject.Named;

@Named
@ViewScoped
public class AutorBean implements Serializable {

Agora, se cambio o o @Named pelo ManagedBean, funciona 100%, lista e cadastra novos autores sem problemas.

A estrutura das pastas do seu projeto esta parecida com a minha?

Lembra que para o CDI o que importa é o @Named né, e o @ManagedBean é quando não queremos que seja gerenciado por ele.

Sim, exatamente, tanto é que no pom.xml coloquei ele para baixar:

 <!-- https://mvnrepository.com/artifact/org.jboss.weld.servlet/weld-servlet - CDI-->
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>${weld.servlet.cdi.version}</version>
        </dependency>

E na chamada do @Named nas classes ele é reconhecido.

A versão do CDI é 2.4.2.Final

solução!

Olá Matheus, Consegui resolver o problema, dentro da estrutura do projeto no Intellij (Project Settings -> Artifacts) estava faltando adicionar o jar do weld-servlet. Agora todo esta funcionando perfeitamente com CDI.

Obrigado pela atenção.