Ajuda JSF com anotações

29 respostas
M

Pessoal, preciso da ajuda de vcs. sou iniciante em desenvolvimento web com JSF e estou com o seguinte problema:
criei uma aplicação simples, apenas para testar a logica de funcionamento do JSF.
tenho um FORM com o botão submit, que ao ser clicado teria que chamar um determinado metodo e redireionar para a proxima pagina, mas isso não está acontecendo.
traz a seguinte mensagem de erro:

An Error Occurred:
javax.el.PropertyNotFoundException: /olamundo.xhtml @13,65 action="#{testeBean.salvar}": Target Unreachable, identifier 'testeBean' resolved to null
+ Stack Trace
+ Component Tree
+ Scoped Variables

vou colocar a classe, os xhtml, o xml e os jars q uso pra se alguem poder me ajudar:

vou colocar aqui os jars que coloquei no projeto:
commons-beanutils-1.8.3
commons-collections-3.2.1
commons-digester-2.1
commons-logging-1.1.1
jsf-api
jsf-impl
jstl-api-1.2
jstl-impl-1.2

vejam aí:

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlnssi="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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TesteJSF</display-name>

<servlet>
<display-name>FacesServlet</display-name>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>

classe TesteBean

package bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="testeBean")
@RequestScoped
public class TesteBean {

private int i;

public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}

public String salvar(){
this.i =1;
if(this.i == 1){

return "sucesso-de-repasse";
}else{
return "erro-de-repasse";
}

}
}

pagina inicial

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Teste inicial</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid>
<h:outputLabel value="Teste qualquer"/>
<h:commandButton action="#{testeBean.salvar}" value="executar"/>
</h:panelGrid>
</h:form>
</h:body>
</html>

pagina que deveria aparecer de nome sucesso-de-repasse.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Teste inicial</title>
</h:head>
<h:body>
<h:outputText value="JSF Sucesso"/>
</h:body>
</html>

29 Respostas

F

Como você está acessando a URL?

Ps.: Utilize BBCode. Assim:

my code
M

Olá fabiozoroastro.

estou usando o tomcat 7 como servidor.
a pagina inicial é a index.xhtml

a URL que uso é a seguinte:

http://localhost:8080/TesteJSF/index.jsf

até aqui tudo vem, ela abre corretamente, mas qndo clico no botão pra executar o Bean ele dá o erro
[b]An Error Occurred:
javax.el.PropertyNotFoundException: /olamundo.xhtml @13,65 action="#{testeBean.salvar}": Target Unreachable, identifier 'testeBean' resolved to null
+ Stack Trace
+ Component Tree
+ Scoped Variables [/b]

e vlw pela dica do CODE.

R

só uma dúvida, vc tem algum arquivo faces-config na sua aplicação?

M

Não, pois até onde eu sei, posso esta errado e pesso que me corrija se estiver, qndo uso anotações não precisa do arquivo faces-config.xml

P

tente sar o commandbutton assim

<h:commandButton actionListener="#{testeBean.salvar}" value="executar"/>
R

Nunca testei mas acho que precisa sim…

F

Maviaelro,

Só pra eu ter certeza que não é problema de escopo/conversação, deixe o seu managed-bean com escopo de sessão, faça o teste e nos fale o resultado.

R

vc está correto, não precisa do faces-config. eu perguntei pq se vc tivesse esse arquivo poderia estar causando conflito, pq pelo erro que ta dando é o seu bean que está null, como se não estivesse sendo instanciado.
faça o seguinte: tente adicionar um construtor padrão ao seu bean, dessa maneira:

public TesteBean(){

}
P

Nunca testei mas acho que precisa sim…

Que eu saiba as anotações são usada no jsf 2.0 quando vc a insere no beans não existe o pq inseri-la no faces-config.xml mas tenta retirar o (name=“testeBean”) e deixar somente @ManagedBean aconselho a usar o @ViewScoped.

M

vamos lá!

ja coloquei assim:

@ManagedBean
@ViewScoped
public class TesteBean {

Assim

@ManagedBean(name = "testeBean")
@SessionScoped
public class TesteBean {

e dá o mesmo erro.

An Error Occurred:
javax.el.PropertyNotFoundException: /index.xhtml @13,65 action="#{testeBean.salvar}": Target Unreachable, identifier 'testeBean' resolved to null
+ Stack Trace
+ Component Tree
+ Scoped Variables
M

ronnytds.
coloquei o construtor vazio como vc indicou e nada tbm

M

Pessoal, os jars estão corretos? são esses mesmos?

commons-beanutils-1.8.3
commons-collections-3.2.1
commons-digester-2.1
commons-logging-1.1.1
jsf-api
jsf-impl
jstl-api-1.2
jstl-impl-1.2

P

cara troca seu web.xml

coloca assim

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

pq aqui funcionou com esse web.xml e a classe / xhtml que vc passou

M

Polverini,
teria algum problema eu passar meu email e vc mandar o projeto funcionando pra mim?

L

eu axo q o pacote JSTL seu é pra versão JSF1.2 por isso o erro lá…pegue o JSTL pra versão 2.0

maviaelro1:
Pessoal, os jars estão corretos? são esses mesmos?
jsf-api
jsf-impl
jstl-api-1.2
jstl-impl-1.2

no meu tem:
jsf-api
jsf-impl
jstl
standard

no pacote JSF2.0(criado por mim nas bibliotecas) e os demais JAR´s dentro da LIB…

P

passa seu email que eu mando

M

[email removido]

P

enviado projeto, so dezipa e abrir pelo netbeans

M

Pessoal, seguinte, estou usando o eclipse, e tava observando o xml do colega, que ele usa
version=“3.0”
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

usando o 3.0

uso como 2.5 e a tela index aparece normal, mas qndo coloco o 3.0 ele dá um erro 404

M

pelo que eu li aqui no livro “PROGRAMAÇÃO JAVA PARA WEB”, a versão 1.2 da jstl é para JSF 2 mesmo.

M

Cara, troca seu web.xml, está mapeando para .jsf

<servlet-mapping>  
    <servlet-name>Faces Servlet</servlet-name>  
    <url-pattern>*.xhtml</url-pattern>  
</servlet-mapping>
L

num eh naum…muda so pra ver se funfa!!!

M

Eu uso a jstl 1.2 em jsf 2 sem problemas.

M

Pessoal, só para dá um feedback a vcs, como não estava conseguindo fazer via anotações testei via faces-config.xml e funcionou, só que eu quero via anotações. Vou continuar tentando, qndo consegui falo pra vcs o que foi. vlw pela ajuda aí galera

C

Cara tenho duas tentativas pra ti.

Primeiro parece absursdo, mas coloca o nome do metodo na action do commandButton com o parenteses:

action="#{testeBean.salvar()}"

Outra coisa, tira o RETURN do ELSE e coloca ele do lado de fora para garantir que vai ter resultado. Parece absurdo, mas faz esse teste tb…

abraços.

M

Vlw Brother pela tentativa, mas nada feito. continua com o mesmo erro.
coloquei o action="#{testeBean.salvar()}" e nada feito

P

mandei por e-mail uma versão do eclipse, nela tem uma pasta com as libs que eu usei, só lembrando usei servlets 3.0 + jsf 2.0 + tomcat 7, coloquei as libs la na pasta de lib do tomcat

M

[b]cara, vlw!!
muito obrigado, agora funcionou.

O que aconteceu, juntei as libs q vc me passou com as q eu tinha e dessa vez funcionou.

vlw cara. [/b]

G

Estou enfrentando o mesmo problema, será que poderia me enviar o projeto funcionando?
[email removido]

Criado 7 de abril de 2011
Ultima resposta 4 de jul. de 2011
Respostas 29
Participantes 9