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

Unreachable, identifier 'carrinhoComprasBean' resolved to null

Estou com o seguinte problema no meu código e não consegui resolver até agora, sei que tem a ver com esse carinha aqui:

<f:metadata>
    <f:viewParam value="#{livroDetalheBean.id}" name="id" />
    <f:viewAction action="#{livroDetalheBean.carregaDetalhe()}"/>
</f:metadata>

<button class="adicionarAoCarrinho-botaoComprar"
    jsf:action="#{carrinhoComprasBean.add(livroDetalheBean.id)}"
        type="submit" title="Compre o E-book">
    Comprar
</button>

Estou recebendo o seguinte erro:

avax.servlet.ServletException: javax.el.PropertyNotFoundException: /detalhe-livro.xhtml @339,43 action="#{carrinhoComprasBean.add(livroDetalheBean.id)}": Target Unreachable, identifier 'carrinhoComprasBean' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)
2 respostas
solução!

Oi Marcos

O código do seu CarrinhoComprasBean está mapeado com @Model conforme exemplo abaixo?

@Model
public class CarrinhoComprasBean {

    @Inject
    private LivroDao livroDao;

    @Inject
    private CarrinhoCompra carrinho;

    public String add(Integer id) {
        Livro livro = livroDao.buscarPorId(id);
        CarrinhoItem item = new CarrinhoItem(livro);
        carrinho.add(item);

        return "carrinho?faces-redirect=true";
    }

    public List<CarrinhoItem> getItens() {
        return carrinho.getItens();
    }

    public void remover(CarrinhoItem item) {
        carrinho.remover(item);
    }
}

Outra opção, troca a anotação para @ManegedBean(name = "carrinhoComprasBean")

Funcionou!! Eu fiz a troca da annotation como você sugeriu e deu certo. Obrigado...