Duvidas relatorio ireport (MEU TCC)

Galera fui reprovado no tcc, e me deram 1 semana para implementar o relatorio para uma nova banca.
é o sequinte conseguir fazer chamar de dentro do netbeans mais nao sei como chama-lo da aplicacao, segue ai o codigo para vcs verem
tenho a classe de conexao

package relatorio.materiaPrima;

/**
 *
 * @author Fred
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class gConexao {

    private static Connection con;

    public static Connection getConexao() throws ExcRepositorio {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/tcc";
        String login = "root";
        String senha = "vertrigo";
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, login, senha);
        } catch (ClassNotFoundException e) {
            throw new ExcRepositorio("Driver não encontrado: " + e.getMessage());
        } catch (SQLException e) {
            throw new ExcRepositorio("Erro abrindo conexão: " + e.getMessage());
        }
        return con;
    }
}

Tenho a classe de repositorio

package relatorio.materiaPrima;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import javax.faces.bean.ManagedBean;
import javax.swing.JOptionPane;
import modelo.Usuario;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
@ManagedBean (name="RelatorioABean")
public class repositorioMateriaPrima {

    public repositorioMateriaPrima() {
    }

//    public void inserir(Usuario user) throws ExcRepositorio {
//        Integer id = user.getIdUsuario();
//        String nome = user.getNome();
//        String SQL = "insert into Usuario (nome) values " + "("+ nome +")";
//        Connection conn = null;
//        Statement stat = null;
//        try {
//            conn = gConexao.getConexao();
//            stat = conn.createStatement();
//            stat.executeUpdate(SQL);
//        } catch (SQLException e) {
//            throw new ExcRepositorio("Erro na conexão ao inserir: " + e.getMessage());
//        } finally {
//            if (stat != null) {
//                try {
//                    stat.close();
//                } catch (SQLException e) {
//                    throw new ExcRepositorio("Erro ao fechar conexão: " + e.getMessage());
//                }
//            }
//        }
//    }

    public JasperPrint gerar() throws ExcRepositorio {
        JasperPrint rel = null;
        try {
            Connection con = gConexao.getConexao();
            HashMap map = new HashMap();
            String arquivoJasper = "materiaPrima.jasper";
            rel = JasperFillManager.fillReport(arquivoJasper, map, con);
        } catch (JRException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return rel;
    }
}

Tenho uma outra classe

package relatorio.materiaPrima;

/**
 *
 * @author Fred
 */
public class ExcRepositorio extends Exception {

    public ExcRepositorio(String mensagem) {
        super(mensagem);
    }
}

E agora tenho a classe com o metado main para chamar o relatorio

package relatorio.materiaPrima;

/**
 *
 * @author Fred
 */
import javax.faces.bean.ManagedBean;
import javax.swing.JOptionPane;
import modelo.Usuario;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class materiaPrima {

    public static void main(String[] args) throws JRException {
        repositorioMateriaPrima rep = new repositorioMateriaPrima();
        JasperPrint relat;				//Insere mais um produto e exibe o relatório
//        String desc = JOptionPane.showInputDialog("Nome do Cliente: ");
        
        Usuario user = new Usuario();
        try {
   //         rep.inserir(user);
            relat = rep.gerar();
            JasperViewer.viewReport(relat, false);
        } catch (ExcRepositorio e) {
           JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage());
       }
    }
}

Se eu executar a classe ele abre o relatorio mais se nao consigo por isso dentro de um command buton por exemplo…
Alguem pode me ajudar?
Eu dependo disso pra passar no tcc.
Obrigado

coloque o botão que você está usando pra tentar abrir o relatório pra gente ver

coloca o codigo que esta dentro do metodo main dentro do evento do seu botao.

Entao eu nao sei como fazer o botao, nao sei de qual forma que devo fazer

ola me desculpa a ignorancia mas como seria isso?
Estou usando o ComandButon do JSF
como ficaria? vc sabe me responder?

Ninguem?

Eu adicionei a anotacao @ManagedBean

ai no botao estou fazendo isso:
<h:commandButton action="#{fornecedor}" value=“Botao1” />

ele ja nao teria que executar a classe?

esta dando o sequinte erro

javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /index2.xhtml @75,73 action="#{fornecedor.teste}": Target Unreachable, identifier 'fornecedor' resolved to null
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	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:312)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:619)
Caused by: javax.el.PropertyNotFoundException: /index2.xhtml @75,73 action="#{fornecedor.teste}": Target Unreachable, identifier 'fornecedor' resolved to null
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:100)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 32 more