[Resolvido] Erro JSF - Target Unreachable

9 respostas
andersonrc

Olá pessoal,

estou fazendo uma aplicação JSF, utilizando um Web Service. Os métodos do WS já testei previamente e todos estão ok.

Só que quando faço alguma operação na view, dá a exceção abaixo. Alguém sabe o que possa ser?

Pesquisei e encontrei que seria necessário adicionar 2 jars, o el-api.jar e o el-impl.jar, e tbm criar um arquivo beans.xml, mas ambas alterações, não resolveram.
Outra observação é que, na minha aplicação web, eu não estou utlizando o faces-config.xml, pois se eu utilizá-lo, a página xhtml vem em branco.

AVISO: /index.xhtml @12,96 value="#{ProdutoBean.descricao}": Target Unreachable, identifier 'ProdutoBean' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @12,96 value="#{ProdutoBean.descricao}": Target Unreachable, identifier 'ProdutoBean' 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:232)
	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)

Abaixo seguem os códigos:

Bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.produto.bean;

import com.produto.ws.ProdutoWS;
import com.produto.ws.ProdutoWS_Service;

/**
 *
 * @author andersonribeiro
 */
public class ProdutoBean {

    private long codigo;
    private String descricao = "";
    private double preco = 0;
    private int quantidade = 0;
    private boolean save = false;
    private boolean remove = false;
    private boolean edit = false;
    private boolean list = false;
    private String resultado = "";
    private ProdutoWS service;

    public ProdutoBean() {
        ProdutoWS_Service servicos = new ProdutoWS_Service();
        service = servicos.getProdutoWSPort();
    }

    public long getCodigo() {
        return codigo;
    }

    public void setCodigo(long codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public boolean isEdit() {
        return edit;
    }

    public void setEdit(boolean edit) {
        this.edit = edit;
    }

    public boolean isList() {
        return list;
    }

    public void setList(boolean list) {
        this.list = list;
    }

    public boolean isRemove() {
        return remove;
    }

    public void setRemove(boolean remove) {
        this.remove = remove;
    }

    public boolean isSave() {
        return save;
    }

    public void setSave(boolean save) {
        this.save = save;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getResultado() {
        return resultado;
    }

    public void setResultado(String resultado) {
        this.resultado = resultado;
    }

    public ProdutoWS getService() {
        return service;
    }

    public void setService(ProdutoWS service) {
        this.service = service;
    }

    public void cadastrar() {
        if (service.cadastrarProduto(descricao, preco, quantidade) == true) {
            save = true;
        }
    }

    public void excluir() {
        if (service.removerProduto(codigo) == true) {
            remove = true;
        }
    }

    public void alterar() {
        if (service.atualizarProduto(codigo, descricao, preco, quantidade) == true) {
            edit = true;
        }
    }

    public void listar() {
        resultado = service.buscarProduto(codigo);
        list = true;
    }
}

A view

<?xml version='1.0' encoding='UTF-8' ?>
<!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>Gerenciamento de Produtos</title>
    </h:head>
    
    <h:body>
        <h:outputLabel value="Cadastrar Produto"/>
        <h:form>
            &lt;h:outputLabel value="Descrição: "/&gt;&lt;h:inputText value="#{ProdutoBean.descricao}"/&gt;<br/>
            &lt;h:outputLabel value="Preço: "/&gt;&lt;h:inputText value="#{ProdutoBean.preco}"/&gt;<br/>
            &lt;h:outputLabel value="Quantidade: "/&gt;&lt;h:inputText value="#{ProdutoBean.quantidade}"/&gt;<br/>
            &lt;h:commandButton value="Salvar" action="#{ProdutoBean.cadastrar}"/&gt;
            &lt;h:outputLabel rendered="#{ProdutoBean.save}" value="Produto cadastrado com sucesso!"/&gt;
        &lt;/h:form&gt;
        
        <p/>&lt;h:outputLabel value="Excluir Produto"/&gt;
        &lt;h:form&gt;
            &lt;h:outputLabel value="Código: "/&gt;&lt;h:inputText value="#{ProdutoBean.codigo}"/&gt;<br/>
            &lt;h:commandButton value="Excluir: " action="#{ProdutoBean.excluir}"/&gt;
            &lt;h:outputLabel rendered="#{ProdutoBean.remove}" value="Produto excluído com sucesso!"/&gt;
        &lt;/h:form&gt;
        
        <p/>&lt;h:outputLabel value="Editar Produto"/&gt;
        &lt;h:form&gt;
            &lt;h:outputLabel value="Código: "/&gt;&lt;h:inputText value="#{ProdutoBean.codigo}"/&gt;<br/>
            &lt;h:outputLabel value="Descrição: "/&gt;&lt;h:inputText value="#{ProdutoBean.descricao}"/&gt;<br/>
            &lt;h:outputLabel value="Preço: "/&gt;&lt;h:inputText value="#{ProdutoBean.preco}"/&gt;<br/>
            &lt;h:outputLabel value="Quantidade: "/&gt;&lt;h:inputText value="#{ProdutoBean.quantidade}"/&gt;<br/>
            &lt;h:commandButton value="Editar: " action="#{ProdutoBean.alterar}"/&gt;
            &lt;h:outputLabel rendered="#{ProdutoBean.edit}" value="Produto editado com sucesso!"/&gt;
        &lt;/h:form&gt;
        
        <p/>&lt;h:outputLabel value="Listar Produto"/&gt;
        &lt;h:form&gt;
            &lt;h:outputLabel value="Código: "/&gt;&lt;h:inputText value="#{ProdutoBean.codigo}"/&gt;<br/>
            &lt;h:commandButton value="Listar" action="#{ProdutoBean.listar}"/&gt;
            &lt;h:outputLabel rendered="#{ProdutoBean.list}" value="#{ProdutoBean.resultado}"/&gt;
        &lt;/h:form&gt;
        
    &lt;/h:body&gt;
&lt;/html&gt;

o web.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app version="3.0" 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-app_3_0.xsd"&gt;
    &lt;context-param&gt;
        &lt;param-name&gt;javax.faces.PROJECT_STAGE&lt;/param-name&gt;
        &lt;param-value&gt;Development&lt;/param-value&gt;
    &lt;/context-param&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;session-config&gt;
        &lt;session-timeout&gt;
            30
        &lt;/session-timeout&gt;
    &lt;/session-config&gt;
    &lt;welcome-file-list&gt;
        &lt;welcome-file&gt;faces/index.xhtml&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
&lt;/web-app&gt;

E o beans.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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://java.sun.com/xml/ns/javaee/beans_1_0.xsd"&gt;
&lt;/beans&gt;

9 Respostas

Hebert_Coelho

Se você não está utilizando o face-config.xml, onde você está declarando a classe ProdutoBean como ManagedBean?

Coloca na sua classe, acima da classe:
@ManagedBean
@RequestScope

Caso tenha outras dúvidas, veja esse post: JSF - Hello World, AutoComplete.

andersonrc

jakefrog:
Se você não está utilizando o face-config.xml, onde você está declarando a classe ProdutoBean como ManagedBean?

Coloca na sua classe, acima da classe:
@ManagedBean
@RequestScope

Caso tenha outras dúvidas, veja esse post: JSF - Hello World, AutoComplete.

Opa jakefrog

mesmo colocando essas anotação é necessário ter o faces-config? De qualquer forma eu coloquei as anotações e continou com a mesma excessão.

E eu colocando o faces-config, surge mais um problema, a view é exibida completamente em branco. E agora?

Infelizmente não posso acessar esse link que vc postou, pois aqui na empresa é bloqueado.

Seguem as alterações:

bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.produto.bean;

import com.produto.ws.ProdutoWS;
import com.produto.ws.ProdutoWS_Service;
import javax.annotation.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author andersonribeiro
 */
@ManagedBean
@RequestScoped
public class ProdutoBean {

    private long codigo;
    private String descricao = "";
    private double preco = 0;
    private int quantidade = 0;
    private boolean save = false;
    private boolean remove = false;
    private boolean edit = false;
    private boolean list = false;
    private String resultado = "";
    private ProdutoWS service;

    public ProdutoBean() {
        ProdutoWS_Service servicos = new ProdutoWS_Service();
        service = servicos.getProdutoWSPort();
    }

    public long getCodigo() {
        return codigo;
    }

    public void setCodigo(long codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public boolean isEdit() {
        return edit;
    }

    public void setEdit(boolean edit) {
        this.edit = edit;
    }

    public boolean isList() {
        return list;
    }

    public void setList(boolean list) {
        this.list = list;
    }

    public boolean isRemove() {
        return remove;
    }

    public void setRemove(boolean remove) {
        this.remove = remove;
    }

    public boolean isSave() {
        return save;
    }

    public void setSave(boolean save) {
        this.save = save;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getResultado() {
        return resultado;
    }

    public void setResultado(String resultado) {
        this.resultado = resultado;
    }

    public ProdutoWS getService() {
        return service;
    }

    public void setService(ProdutoWS service) {
        this.service = service;
    }

    public void cadastrar() {
        if (service.cadastrarProduto(descricao, preco, quantidade) == true) {
            save = true;
        }
    }

    public void excluir() {
        if (service.removerProduto(codigo) == true) {
            remove = true;
        }
    }

    public void alterar() {
        if (service.atualizarProduto(codigo, descricao, preco, quantidade) == true) {
            edit = true;
        }
    }

    public void listar() {
        resultado = service.buscarProduto(codigo);
        list = true;
    }
}

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_1_2.xsd"
	version="1.2">
            
    <managed-bean>
        <managed-bean-name>produtoBean</managed-bean-name>
        <managed-bean-class>com.produto.bean.ProdutoBean</managed-bean-class>
    </managed-bean>
      
</faces-config>

view

<?xml version='1.0' encoding='UTF-8' ?>
<!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>Gerenciamento de Produtos</title>
    </h:head>
    
    <h:body>
        <h:outputLabel value="Cadastrar Produto"/>
        <h:form>
            <h:outputLabel value="Descrição: "/><h:inputText value="#{produtoBean.descricao}"/><br/>
            <h:outputLabel value="Preço: "/><h:inputText value="#{produtoBean.preco}"/><br/>
            <h:outputLabel value="Quantidade: "/><h:inputText value="#{produtoBean.quantidade}"/><br/>
            <h:commandButton value="Salvar" action="#{produtoBean.cadastrar}"/>
            <h:outputLabel rendered="#{produtoBean.save}" value="Produto cadastrado com sucesso!"/>
        </h:form>
        
        <p/><h:outputLabel value="Excluir Produto"/>
        <h:form>
            <h:outputLabel value="Código: "/><h:inputText value="#{produtoBean.codigo}"/><br/>
            <h:commandButton value="Excluir: " action="#{produtoBean.excluir}"/>
            <h:outputLabel rendered="#{produtoBean.remove}" value="Produto excluído com sucesso!"/>
        </h:form>
        
        <p/><h:outputLabel value="Editar Produto"/>
        <h:form>
            <h:outputLabel value="Código: "/><h:inputText value="#{produtoBean.codigo}"/><br/>
            <h:outputLabel value="Descrição: "/><h:inputText value="#{produtoBean.descricao}"/><br/>
            <h:outputLabel value="Preço: "/><h:inputText value="#{produtoBean.preco}"/><br/>
            <h:outputLabel value="Quantidade: "/><h:inputText value="#{produtoBean.quantidade}"/><br/>
            <h:commandButton value="Editar: " action="#{produtoBean.alterar}"/>
            <h:outputLabel rendered="#{produtoBean.edit}" value="Produto editado com sucesso!"/>
        </h:form>
        
        <p/><h:outputLabel value="Listar Produto"/>
        <h:form>
            <h:outputLabel value="Código: "/><h:inputText value="#{produtoBean.codigo}"/><br/>
            <h:commandButton value="Listar" action="#{produtoBean.listar}"/>
            <h:outputLabel rendered="#{produtoBean.list}" value="#{produtoBean.resultado}"/>
        </h:form>
        
    </h:body>
</html>
Hebert_Coelho

Vc está utilizando Anotação e JSF 1.2? version=“1.2”

Hebert_Coelho
Deixe seu faces-config conforme abaixo:
<?xml version="1.0"?>
<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">
  <!--
      Let's keep it empty. In JSF 2.0 we use annotations.
  -->
</faces-config>
andersonrc
jakefrog:
Deixe seu faces-config conforme abaixo:
<?xml version="1.0"?>
<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">
  <!--
      Let's keep it empty. In JSF 2.0 we use annotations.
  -->
</faces-config>

Tô utilizando JSF 2. Eu alterei o faces-config da forma que vc postou aí, mas como eu já tinha falado antes, a página xhtml é exibida em branco. Não tô utilizando facelets, é necessário colocar mais alguma configuração no web.xml/faces-config?

Hebert_Coelho

Como você está acessando seu link?
Você tem que acessar colocando “faces” conforme vc mapeou no seu web.xml

andersonrc

jakefrog:
Como você está acessando seu link?
Você tem que acessar colocando “faces” conforme vc mapeou no seu web.xml

Tô acessando por essa URL http://localhost:8080/ProdutoWeb/faces/index.xhtml mas só em branco, e não dá nenhuma exceção na console do Glassfish

A

Utiliza:

import javax.faces.bean.ManagedBean;

no lugar de:

import javax.annotation.ManagedBean;
andersonrc

ayslanms:
Utiliza:

import javax.faces.bean.ManagedBean;

no lugar de:

import javax.annotation.ManagedBean;


Obrigado ayslanms, era essa alteração mesmo. Nem de faces-config precisou.

Agradeço tbm ao jakefrog pela ajuda.

Criado 17 de janeiro de 2012
Ultima resposta 17 de jan. de 2012
Respostas 9
Participantes 3