Botão em JSF não dispara em um Bean [RESOLVIDO]

6 respostas
warquia

Boa tarde amigos, Gostaria que me ajudasse a solucionar um problema, pois bem, tenho um Bean onde quero mostra um mensagem simples no console, porem o index.xhtml não dispara o método que ta em um bean.
Eis os códigos:

index.xhtml

<?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>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:commandButton value="Mostrar" action="#{classpai.mostra}"></h:commandButton>
            Testando <h1>JSF</h1>
        </h:form>
    </h:body>
</html>

Classpai.java :

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

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Desen06
 */
@ManagedBean
@SessionScoped
public class classpai {

    public String nome;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    public void mostra(){
        System.out.println("executou");
    }
}

Então o sistema sobe normalmente, e quando clico no Botãoo MOSTRAR não acontece nada.

Grato,
Warquia P.

6 Respostas

Alsberg

Seu método ‘mostra’, e todo método que é acionado pela página xhtml precisa obrigatoriamente retornar uma String. Essa string deve ser o nome da página que será exibida após o método ser processado.

Se você quer retornar para a mesma página, ficaria assim:

public String mostra(){ System.out.println("executou"); return "index"; }

dofun12

Tente mudar o <h:commandButton value="Mostrar" action="#{classpai.mostra}"></h:commandButton>
para <h:commandButton value="Mostrar" actionListener="#{classpai.mostra}" />
e na Classe pai tenta colocar a annotation @ManagedBean(name="classpai")

hmsilva

warquia,

Eu fiz uma POC como a sua e o meu metodo mostrar foi chamado e o texto "Passei aqui !!!" foi printado na tela.
Segue:

Bean:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="classPai")
@SessionScoped
public class ClassPai {

	public void mostrar(){
		System.out.println("Passei aqui !!!");
	}
}
xhtml:
<?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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
	  
    <h:head>  
        <title>Facelet Title</title>  
    </h:head>  
    <h:body>  
        <h:form>  
            <h:commandButton value="Mostrar" action="#{classPai.mostrar}"></h:commandButton>  
            Testando <h1>JSF</h1>  
        </h:form>  
    </h:body>  
</html>

No meu console o texto "Passei aqui !!!" foi exibido.

dofun12

Caso não funcione,tente dar redeploy/reset

warquia
Muito obrigado a todos, conseguir com cada uma das dicas. observei que não tinha no index as tags JSF
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

[size=18]Observem como ficou [/size]

Index.xhtml
<?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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
	  
    <h:head>  
        <title>Facelet Title</title>  
    </h:head>  
    <h:body>  
        <h:form>  
            <h:commandButton value="Mostrar" action="#{classPai.mostrar}"></h:commandButton>  
            Testando <h1>JSF</h1>  
        </h:form>  
    </h:body>  
</html>
ClassPai.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "classPai")
@SessionScoped
public class ClassPai {

    public void mostrar() {
        System.out.println("Passei aqui !!!");
    }
}

Muito Obrigado!

hmsilva

Quando precisar… é só chamar !!!

Criado 21 de novembro de 2012
Ultima resposta 21 de nov. de 2012
Respostas 6
Participantes 4