Chamando metodos em pagina Jsf

9 respostas
erasmo_tec

Bom dia

Estou desenvolvendo uma aplicação JSF e não estou conseguindo executar um metodo para fazer a leitura do arquivo.

Alguem pode me ajudar, eswtou postando minhas classes:

public class DadosParaRetirada {
    //registro header
    private static String cdEscob; 
    private static String cdBanco; 
    private static String tpReg; 
    private static String idArq; 
    private static String dtBase; 
    private static String dtGera; 
    private static String nrArq; 
    private static String dtEnvio; 
    private static String hrenvio; 
    private static String filler; 
    //registro retirada
    private static String nrPessoa; 
    private static String nmDevedor; 
    private static String nrOpr; 
    private static String cdEnvio; 
    private static String cdRemessa; 
    private static String cdPrd; 
    private static String nmPrd; 
    private static String vlrDivida;
    private static String cdMotRetirada; 
    private static String dsMotretirada; 
    private static String idRetIncond; 
    
    //trailler
    //private static String cdEscob; 
    //private static String cdBanco; 
    //private static String tpReg; 
    private static String qtdTotReg; 
    //private static String filler; 

   //getters and setters
}
public class DadosParaRetiradaDAO extends DataBaseUtil {

    public DadosParaRetiradaDAO() {
    }

    public boolean adicionaDadosParaRetiradaHeader(DadosParaRetirada dpr) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = pegaDeclaracaoPreparada("insert into header values(?,?,?,?,?,?,?,?,?,?)");
        ps.setString(1, dpr.getCdEscob());
        ps.setString(2, dpr.getCdBanco());
        ps.setString(3, dpr.getTpReg());
        ps.setString(4, dpr.getIdArq());
        ps.setString(5, dpr.getDtBase());
        ps.setString(6, dpr.getDtGera());
        ps.setString(7, dpr.getNrArq());
        ps.setString(8, dpr.getDtEnvio());
        ps.setString(9, dpr.getHrenvio());
        ps.setString(10, dpr.getFiller());
        boolean toReturn = ps.execute();
        ps.close();
        return toReturn;
    }

    public boolean adicionaDadosParaRetiradaRetirada(DadosParaRetirada dpr) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = pegaDeclaracaoPreparada("insert into retirada values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
        ps.setString(1, dpr.getCdEscob());
        ps.setString(2, dpr.getCdBanco());
        ps.setString(3, dpr.getTpReg());
        ps.setString(4, dpr.getNrPessoa());
        ps.setString(5, dpr.getNmDevedor());
        ps.setString(6, dpr.getNrOpr());
        ps.setString(7, dpr.getCdEnvio());
        ps.setString(8, dpr.getCdRemessa());
        ps.setString(9, dpr.getCdPrd());
        ps.setString(10, dpr.getNmPrd());
        ps.setString(11, dpr.getVlrDivida());
        ps.setString(12, dpr.getCdMotRetirada());
        ps.setString(13, dpr.getDsMotretirada());
        ps.setString(14, dpr.getIdRetIncond());
        ps.setString(15, dpr.getFiller());
        boolean toReturn = ps.execute();
        ps.close();
        return toReturn;

    }

    public boolean adicionaDadosParaRetiradaTrailler(DadosParaRetirada dpr) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = pegaDeclaracaoPreparada("insert into trailler values(?,?,?,?,?)");
        ps.setString(1, dpr.getCdEscob());
        ps.setString(2, dpr.getCdBanco());
        ps.setString(3, dpr.getTpReg());
        ps.setString(4, dpr.getQtdTotReg());
        ps.setString(5, dpr.getFiller());
        boolean toReturn = ps.execute();
        ps.close();
        return toReturn;
    }
    public boolean limpaBaseParaRetirada(DadosParaRetirada dpr) throws ClassNotFoundException, SQLException{
        PreparedStatement ps = pegaDeclaracaoPreparada("delete from retirada");
        boolean ToReturn = ps.execute();
        ps.close();
        return  ToReturn;
    }
}
public class LeituraDAO {

    public static void Leia(String arquivo) throws FileNotFoundException, IOException, ClassNotFoundException, SQLException {
        DadosParaRetirada dpr = new DadosParaRetirada();
        DadosParaRetiradaDAO d = new DadosParaRetiradaDAO();
        BufferedReader naLinha = null;
        naLinha = new BufferedReader(new FileReader(arquivo));
        String linha = null;

        //limpando a base de retirada
        d.limpaBaseParaRetirada(dpr);
        while ((linha = naLinha.readLine()) != null) {
            //leitura do registro header do arquivo
            dpr.setCdEscob(linha.substring(0, 8));
            dpr.setCdBanco(linha.substring(8, 12));
            dpr.setTpReg(linha.substring(12, 14));
            dpr.setIdArq(linha.substring(14, 58));
            dpr.setDtBase(linha.substring(58, 66));
            dpr.setDtGera(linha.substring(66, 74));
            dpr.setNrArq(linha.substring(74, 79));
            dpr.setDtEnvio(linha.substring(79, 87));
            dpr.setHrenvio(linha.substring(87, 93));
            dpr.setFiller(linha.substring(93, 300));

            //leitura do registro de retirada do arquivo
            dpr.setCdEscob(linha.substring(0, 8));
            dpr.setCdBanco(linha.substring(8, 12));
            //tipo de registro já lido
            dpr.setNrPessoa(linha.substring(14, 22));
            dpr.setNmDevedor(linha.substring(22, 72));
            dpr.setNrOpr(linha.substring(72, 105));
            dpr.setCdEnvio(linha.substring(105, 110));
            dpr.setCdRemessa(linha.substring(110, 119));
            dpr.setCdPrd(linha.substring(119, 128));
            dpr.setNmPrd(linha.substring(128, 168));
            dpr.setVlrDivida(linha.substring(168, 185));
            dpr.setCdMotRetirada(linha.substring(185, 189));
            dpr.setDsMotretirada(linha.substring(189, 239));
            dpr.setIdRetIncond(linha.substring(239, 240));
            dpr.setFiller(linha.substring(240, 300));

            //trailler
            dpr.setQtdTotReg(linha.substring(15,30));

            System.out.println(dpr.getVlrDivida());
            if (dpr.getTpReg().equals("00")) {
                d.adicionaDadosParaRetiradaHeader(dpr);
            } else if (dpr.getTpReg().equals("01")) {
                d.adicionaDadosParaRetiradaRetirada(dpr);
            } else {
                d.adicionaDadosParaRetiradaTrailler(dpr);
            }
        }
        naLinha.close();
    }
}    //leitura do registro de retirada do arquivo

Este é o manage bean que quero criar o metodo para leitura.
É nesta pagina que preciso chamar o metodo que irá fazer a leitura e não estou conseguindo

public class DadosParaRetiradaMB extends DataBaseUtil {
    private static String arquivo;

    LeituraDAO l = new LeituraDAO();

    /** Creates a new instance of DadosParaRetiradaMB */
    public DadosParaRetiradaMB() {
        
    }

    public static void chamaLeia() {
        l.Leia(arquivo);


    }
}

Esta é a pagina que vou integrar o manage bean

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Leitura</title>
    </head>
    <body>
        <f:view>
            <h:outputText value="Nome do arquivo: " />
            <h:inputText />
            <h:commandButton value="Processar" action="#{DadosParaRetiradaMB"> </h:commandButton> 
        </f:view>
    </body>
</html>

Alguem tem idéia de como posso chamar esse metodo

9 Respostas

Marky.Vasconcelos

Voce tem que adicionar o ManagedBean ao faces.cfg.xml como ManagedBean e na action colocar:

action="#{dadosBean.chamaLeia}"

Onde dadosBean é o nome que voce deu no faces.cfg.xml ou o nome que voce preferir.

erasmo_tec

o problema é que o metodo não é reconhecido no meu bean para eu poder acessar, é esse o meu problema, queria saber se é problema na construção do meu metodo… todos os exemplos que vejo na construção do metodo sempre usam public String e estou usando public static void não sei se é isso.

Marky.Vasconcelos

Não tinha reparado que é static… mas voce já mapeou o Bean no faces.cfg e tentou rodar?

erasmo_tec

já sim, olha meu Xml

<faces-config version="1.2" 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"> <managed-bean> <managed-bean-name>DadosParaRetiradaMB</managed-bean-name> <managed-bean-class>sant550.managedbeans.DadosParaRetiradaMB</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/forwardToJSF.jsp</from-view-id> <navigation-case> <from-outcome>gotoLeitura</from-outcome> <to-view-id>/leitura.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config>

se eu for usar minha classe ele me dá duas opções:
dadosBean.class e dadosBean.toString mas não o metodo que criei

Marky.Vasconcelos

Os editores JSF tem alguns problemas de não mostrar algumas actions mesmo… mas voce já tentou escrever e rodar?

erasmo_tec

tentei rodar sim no netbeans que é onde estou desenvolvendo, e dá o seguinte erro:

org.apache.jasper.JasperException: /leitura.jsp(24,12) "#{DadosParaRetiradaMB.chamaLeia" contains invalid expression(s): javax.el.ELException: Error Parsing: #{DadosParaRetiradaMB.chamaLeia
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
	org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1149)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1512)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:838)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1512)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2399)
	org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
	org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:165)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
Marky.Vasconcelos

Nunca precisei de usar métodos staticos com JSF… mas… voce precisa mesmo usar eles?

Cria um bean com escopo request para essa finalidade.

erasmo_tec

não precisa necessariamente ser um metodo estatico, mas como poderei fazer isso?

Marky.Vasconcelos

Tira o static do método e nessa linha do config

session

coloca

request

Criado 18 de dezembro de 2008
Ultima resposta 18 de dez. de 2008
Respostas 9
Participantes 2