Re:Ajuda Desenvolvimento Web JSF [RESOLVIDO]

24 respostas
P

Olá Pessoal?!

Estou iniciando em meus estudos web com JSF. E não consigo resolver este problema.
Segue abaixo o meu código fonte

Classe UsuarioBean.java

package financeiro.web;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class UsuarioBean {
	
	private String nome;
	private String email;
	private String senha;
	private String confirmaSenha;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public String getConfirmaSenha() {
		return confirmaSenha;
	}
	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}
	
	public String novo() {
		return "usuario";
	}
	
	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		if(!this.senha.equalsIgnoreCase(this.confirmaSenha)) {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Senha confirmada incorretamente", ""));
			return "usuario";
		}
		// salva o usuário
		return "sucesso";
	}
}

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_2_5.xsd" 
	id="WebApp_ID" version="2.5">
  <display-name>FinanceiroWeb</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>

Arquivo faces-config.xml

<?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">
    <managed-bean>
    	<managed-bean-name>usuarioBean</managed-bean-name>
    	<managed-bean-class>financeiro.web.UsuarioBean</managed-bean-class>
    	<managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

</faces-config>

Fonte da página index.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<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>Gerenciador Financeiro Pessoal</title>
</h:head>
<h:body>
	<h1>Gerenciador Financeiro Pessoal</h1>
	<h:form>
		<h:commandLink action="#{usuarioBean.novo}">Novo usuário</h:commandLink>
	</h:form>
</h:body>
</html>

Página usuario.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<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>Cadastro de Usuários</title>
</h:head>
<h:body>
	<h1>Cadastro de Usuários</h1>
	<hr />
	<h:form>
		<h:messages />
		<h:panelGrid columns="2">
			<h:outputLabel value="Nome:" for="nome" />
			<h:inputText id="nome" label="Nome" value="#{usuarioBean.nome}" required="true" />
			<h:outputLabel value="e-Mail:" for="email" />
			<h:inputText id="email" label="e-Mail" value="#{usuarioBean.email}" />
			<h:outputLabel value="Senha:" for="senha" />
			<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.senha}" required="true" />
			<h:outputLabel value="Confirmar Senha:" for="confirmarSenha" />
			<h:inputSecret id="confirmarSenha" label="Confirmar Senha" value="#{usuarioBean.confirmaSenha}"  required="true" />
			<h:outputText />
			<h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />
		</h:panelGrid>
	</h:form>
	<hr />
</h:body>
</html>

Página mostraUsuario.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<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>Usuário cadastrado</title>
</h:head>
<h:body>
	<h1>Usuário cadastrado</h1>
	<hr />
	Nome:    <h:outputText value="#{usuarioBean.nome}" /> <br />
	e-Mail   <h:outputLink value="mailto:#{usuarioBean.email}" >
			 <h:outputText value="#{usuarioBean.email}" />
			 </h:outputLink><br />
	Senha:   <h:outputText value="#{usuarioBean.senha}" /><br />
	<hr />
	<h:form>
		<h:commandLink action="inicio" value="inicio" />
	</h:form>
</h:body>
</html>

Quando vou criar um novo usuário digito todos os campos aparece a seguinte mensagem de erro

Para maiores informações sobre de onde tirei esses fontes. São do livro Programação Java para Web

Abraços

24 Respostas

O

Caro colega.

Acho interessante você utilizar o padrão do JEE 6.
que utiliza anotação e usa bem menos o xml.

P

otaviojava

O problema é por causa da anotação?

L

Use Annotation

T

peresjuliao:
otaviojava

O problema é por causa da anotação?

Não, com annotation seu código ficará bem mais limpo,mas do jeito que vc fez também da certo!

não vi a declaração das regras de navegação no deu faces-config,deve ser isso, coloca estas configurações!

O

Como Tiburcio_Mancha não impacta.
O jee 6 é compatível com as versões antigas.
Mas nessa nova versão fica bem mais fácil o desenvolvimento e o código fica mais limpo.
De qualquer forma nós vamos te ajudar.
Faz o que o Tiburcio_Mancha falou.

J

Independente de usar jsf 2 com as anotações para o mapeamento, é interessante saber realizar as configurações por xml, pode ser util ( por exemplo um cliente que precisa de manutenção em um sistema com jsf <=1.2).
No seu caso está faltando as navigation-rules, da uma pesquisada no google sobre isso que tu encontra explicações e exemplo de como fazer, mas é bem simples.

A

muito provalvelmente o problema esta no return do seu Bean

P

Olá, Pessoal

Consegui resolver o problema era no faces-config.xml

e justamente no

segue o complemento para o pessoal que algum dia tiver a mesma dúvida minha

<navigation-rule>
    	<from-view-id>*</from-view-id>
    	<navigation-case>
    		<from-outcome>inicio</from-outcome>
    		<to-view-id>/index.xhtml</to-view-id>
    	</navigation-case>
    	<navigation-case>
    		<from-outcome>usuario</from-outcome>
    		<to-view-id>/usuario.xhtml</to-view-id>
    	</navigation-case>
    </navigation-rule>
T

interessante, pq ???

O

òtimo man.
Mas mesmo com esse problema resolvido veja a versão mais atual.
Por que no jsf 2.0 vc não precisa mais configurar isso. Basta apenas você retornar o nome da página.
Por exemplo se vc quer chegar na página index.xhtml
vc precisa simplismente retonar a string “index”

M

Pessoal, estou com o mesmo problema:
Não foi possível encontrar um caso de navegação correspondente na ID de exibição ‘/olamundo.xhtml’ para a ação ‘testeBean.salvar’ com o resultado ‘testeBean.salvar’

Estou usando anotações.
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

O meu é algo bem simples, só pra teste mesmo

vejam aí:
web.xml

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


TesteJSF

FacesServlet FacesServlet javax.faces.webapp.FacesServlet 1 FacesServlet *.jsf javax.faces.PROJECT_STAGE Development index.html index.htm index.jsp

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?faces-redirect=true";
	}
	
}

}

pagina inicial

<?xml version="1.0" encoding="ISO-8859-1" ?> Teste inicial

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

<?xml version="1.0" encoding="ISO-8859-1" ?> Teste inicial

e continua aparecendo a mensagem de que não conseguiu encontrar o caminho da navegação
se alguém me ajudar eu agradeço.

R

cara, no action do teu commandButton faltou colocar o testeBean.salvar dentro de #{}. o correto é #{testeBean.salvar}

M

valeu ronnytds. realmente, me passei nisso, mas agora apareceu este 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
R

cara, esquisito acontecer esse erro, mas pra testar tenta colocar teu bean como SessionScoped e executa de novo pra ver o que acontece.

M

cara,

continua acontecendo a mesma coisa.

coloquei meu Bean como SessionScoped, mas deu no mesmo.

Será que os jars que estou usando estão corretos?
acredito que sim, senão nem rodaria. correto?

M

cara,

continua acontecendo a mesma coisa.

coloquei meu Bean como SessionScoped, mas deu no mesmo.

Será que os jars que estou usando estão corretos?
acredito que sim, senão nem rodaria. correto?

R

Obrigado peresjuliao, eu estava com o mesmo problema que voce.Bem pensado deixar o complemento.

O livro em si esta faltando alguns detalhes e este é um deles.

Olá, Pessoal

Consegui resolver o problema era no faces-config.xml

e justamente no

segue o complemento para o pessoal que algum dia tiver a mesma dúvida minha

view plaincopy to clipboardprint?

<navigation-rule>  
        <from-view-id>*</from-view-id>  
        <navigation-case>  
            <from-outcome>inicio</from-outcome>  
            <to-view-id>/index.xhtml</to-view-id>  
        </navigation-case>  
        <navigation-case>  
            <from-outcome>usuario</from-outcome>  
            <to-view-id>/usuario.xhtml</to-view-id>  
        </navigation-case>  
    </navigation-rule>

Valeu

Z

Olá, pessoal.

Esse livro é bom, achei algumas coisas estranhas com ICEFACES 2.0. Porém, é o único que conheço que possui componentes visuais como o woodstock(projeto descontinuado). Trabalhar com componentes prontos é bem legal, arrastá-los o layout dá muita produtividade, é por isso que muitos escolhem o asp.net, entretantanto os outros só sabem criticar.

Tudo que é novo há bugs e falta de informação. Essa aplicação do livro é bem estranha, não sei se são as Libraries ou configuração que dá “pau”.

O problema aí é o seguinte: você precisa realmente configurar dessa maneira o arquivo faces-config, do jeito que esta no livro aparece alguns erros de caminho não encontrado de ID, é apenas uma pequena adaptação:

<?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>*</from-view-id> 
    	   <navigation-case>
    <from-outcome>inicio</from-outcome>
    <to-view-id>/index.xhtml</to-view-id>
    </navigation-case>
    
        <navigation-case>
    	<from-outcome>usuario</from-outcome>
    	<to-view-id>/usuario.xhtml</to-view-id>    
    </navigation-case>   
     
   
    <navigation-case>
    	<from-outcome>sucesso</from-outcome>
    	<to-view-id>/mostraUsuario.xhtml</to-view-id>    
    </navigation-case>   
    </navigation-rule>
        
     <managed-bean>  
        <managed-bean-name>usuarioBean</managed-bean-name>  
        <managed-bean-class>financeiro.web.UsuarioBean</managed-bean-class>  
        <managed-bean-scope>request</managed-bean-scope>  
    </managed-bean>  

</faces-config>

Outra coisa, percebi que você mudou o arquivo XML, não precisa, deixa do geito original, eu tinha modificado e deu pau também.

Segue essas instruções que a aplicação irá funcionar, aqui rodou legal, testei o netbeans tbm!

Felicidades.

R

zolotareff Boa Tarde!

Meu projeto esta com este erro:

HTTP Status 404 - /FinanceiroWeb/publico/login.jsf


type Status report

message /FinanceiroWeb/publico/login.jsf

description The requested resource (/FinanceiroWeb/publico/login.jsf) is not available.


Apache Tomcat/7.0.25

Ja refiz o projeto varias vezes so que o erro persiste.O que sera?

Web xml

<?xml version="1.0" encoding="UTF-8"?> FinanceiroWeb1 index.html index.htm index.jsp default.html default.htm default.jsp Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.jsf conexaoFilter financeiro.web.filter.ConexaoHibernateFilter conexaoFilter *.jsf

hibernate.cfg

<?xml version="1.0" encoding="UTF-8"?>
<navigation-rule>  
    <from-view-id>*</from-view-id>   
       <navigation-case>  
<from-outcome>inicio</from-outcome>  
<to-view-id>/index.xhtml</to-view-id>  
</navigation-case>  
  
    <navigation-case>  
    <from-outcome>usuario</from-outcome>  
    <to-view-id>/usuario.xhtml</to-view-id>      
</navigation-case>     
   
 
<navigation-case>  
    <from-outcome>sucesso</from-outcome>  
    <to-view-id>/mostraUsuario.xhtml</to-view-id>      
</navigation-case>     
</navigation-rule>  
      
 <managed-bean>    
    <managed-bean-name>usuarioBean</managed-bean-name>    
    <managed-bean-class>financeiro.web.UsuarioBean</managed-bean-class>    
    <managed-bean-scope>request</managed-bean-scope>    
</managed-bean>

Faces-config

<?xml version="1.0" encoding="UTF-8"?>
<managed-bean>
<managed-bean-name>usuarioBean</managed-bean-name>
<managed-bean-class>financeiro.web.UsuarioBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<navigation-rule>  
    <from-view-id>*</from-view-id>  
    <navigation-case>  
        <from-outcome>inicio</from-outcome>  
        <to-view-id>/index.xhtml</to-view-id>  
    </navigation-case>  
    <navigation-case>  
        <from-outcome>usuario</from-outcome>  
        <to-view-id>/usuario.xhtml</to-view-id>  
    </navigation-case>  
</navigation-rule> 

<navigation-rule>  
    <from-view-id>/usuario.xhtml</from-view-id>  
    <navigation-case>  
        <from-outcome>sucesso</from-outcome>  
        <to-view-id>/mostraUsuario.xhtml</to-view-id>  
    </navigation-case>  
    
</navigation-rule>

meu projeto nao esta funcionando!
Preciso de sua ajuda para descobrir o que é.

Grato.

T

Eu to com um problema parececido, mas eu to usando o annotations para mapear !
Quanda a senha nao bate com a senha confirmada fica tudo certo, mas quando a senha eh = a senha confirmada da o seguinte erro:

Não foi possível encontrar um caso de navegação correspondente na ID de exibição ‘/usuario.xhtml’ para a ação ‘#{usuarioBean.salvar}’ com o resultado ‘sucesso’

Vou colar o codigo aqui:

package financeiro.web;



import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
  
@ManagedBean(name="usuarioBean")
@RequestScoped

public class UsuarioBean {
	
	
	private String nome;
	private String email;
	private String senha;
	private String confirmaSenha;
	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public String getConfirmaSenha() {
		return confirmaSenha;
	}
	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}
	
	public String novo(){
		return "usuario";
	}
	
	
	public String salvar() {  
        FacesContext context = FacesContext.getCurrentInstance();  
        if(!this.senha.equalsIgnoreCase(this.confirmaSenha)) {  
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,  
                    "Senha confirmada incorretamente", ""));  
            return "usuario";  
        }  
        // salva o usuário  
        return "sucesso";  
    }  
	
	

}
<?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="htpp://java.sun.com/jsf/core">

<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Cadastro de Usuários</title>
</h:head>  
<h:body>  
    <h1>Cadastro de Usuários</h1>  
    <hr />  
    <h:form>  
        <h:messages />  
        <h:panelGrid columns="2">  
            <h:outputLabel value="Nome:" for="nome" />  
            <h:inputText id="nome" label="Nome" value="#{usuarioBean.nome}" required="true" />  
            <h:outputLabel value="e-Mail:" for="email" />  
            <h:inputText id="email" label="e-Mail" value="#{usuarioBean.email}" />  
            <h:outputLabel value="Senha:" for="senha" />  
            <h:inputSecret id="senha" label="Senha" value="#{usuarioBean.senha}" required="true" />  
            <h:outputLabel value="Confirmar Senha:" for="confirmarSenha" />  
            <h:inputSecret id="confirmarSenha" label="Confirmar Senha" value="#{usuarioBean.confirmaSenha}"  required="true" />  
            <h:outputText />  
            <h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />  
        </h:panelGrid>  
    </h:form>  
    <hr />  
</h:body>  
</html>

Nao sei mais o que fazer para resolver o problema : /

A

estou com esse mesmo problema tb
alguem poderia ajudar?

J

Algupem solucionou esta última bagaça? A última é mais parecida com a minha.

D

amigo depois da uma lida aqui:

J

Jura que isso foi pra mim?

To bobo!!!

Criado 29 de dezembro de 2010
Ultima resposta 12 de set. de 2014
Respostas 24
Participantes 14