Eu preciso pegar informações específicas do arquivo e imprimir na tela do Extrato da conta (que está em Html), só que eu não tenho idéia de como fazer alguém pode me ajudar.
packageclasses.menu;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjavax.faces.application.FacesMessage;importjavax.faces.bean.ManagedBean;importjavax.faces.context.FacesContext;@ManagedBeanpublicclassCadastro{publicStringnome;publicintnumAge;publicStringnumConta;publicStringgetNumConta(){returnnumConta;}publicvoidsetNumConta(StringnumConta){this.numConta=numConta;}publicvoidsetNumAge(intnumAge){this.numAge=numAge;}publicdoublegetSaldo(){returnsaldo;}publicvoidsetSaldo(doublesaldo){this.saldo=saldo;}publicdoublesaldo;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicintgetNumAge(){returnnumAge;}publicvoidgravar(){try{FileOutputStreamarquivo=newFileOutputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt",true);PrintWriterpr=newPrintWriter(arquivo);pr.print("Numero da Agencia :"+numAge);pr.print("Numero da Conta :"+numConta);pr.print("Saldo :"+saldo);pr.println("Nome:"+nome);pr.close();arquivo.close();}catch(Exceptione){System.out.println("Erro escrever arquivo");}FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Mensagem de confirmação:","Gravado com sucesso!"));}publicvoidler(){try{FileInputStreamarquivo=newFileInputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt");InputStreamReaderinput=newInputStreamReader(arquivo);@SuppressWarnings("resource")BufferedReaderbr=newBufferedReader(input);Stringlinha;do{linha=br.readLine();if(linha!=null){String[]palavras=linha.split(";");System.out.println("Nova linha");for(inti=0;i<palavras.length;i++){numConta=palavras[i];}System.out.println("O que esta imprimindo "+numConta);}}while(linha!=null);}catch(Exceptione){System.out.println("Erro ler arquivo");}}}
<p:outputLabelfor="icon"value="Número da Conta:"/><p:inputTextid="icon"required="true"value="#{cadastro.numConta}"/><p:messagefor="icon"display="icon"/><p:outputLabelfor="tt"value="Saldo:"/><p:inputTextid="tt"required="true"value="#{cadastro.saldo}"/><p:messagefor="tt"display="tooltip"/><p:outputLabelfor="txt"value="Nome:"/><p:inputTextid="txt"required="true"value="#{cadastro.nome}"/><p:messagefor="txt"display="text"/></h:panelGrid><p:messagesid="messages"showDetail="true"autoUpdate="true"closable="true"/><p:commandButtonvalue="Sim"actionListener="#{mensagemCadastro.sim}"update="grid"/><p:commandButtonvalue="Não"actionListener="#{mensagemCadastro.nao}"/><p:commandButtonvalue="Gravar"actionListener="#{cadastro.gravar()}"/><p:commandButtonvalue="ler"actionListener="#{cadastro.ler}"/></h:form>
</h:body>
<h:head></h:head><h:body><h3>ExtratodaConta:</h3><p:panelGridcolumns="2"><h:outputTextvalue="Número da Agência: "/><h:outputTextvalue="#{cadastro.numAge}"/><h:outputTextvalue="Número da Conta: "/><h:outputTextvalue="#{cadastro.numConta}"/><h:outputTextvalue="Nome do Usuário da Conta: "/><h:outputTextvalue="#{cadastro.nome}"/><h:outputTextvalue="Saldo Atual: "/><h:outputTextvalue="#{saque.saldo}"/></p:panelGrid></h:body>
Bom, basicamente, posso ver que você já tem o código praticamente pronto.
Agora, precisamos saber como o arquivo a ser lido está e qual a dificuldade, exata, que você encontra.
Pois, se este é o formato a ser lido, você vai ter sim, muita dificuldade em ler os dados, afinal, não existe um padrão que defina qual a informação em cada linha
K
Katielen_Castro
Quando rodo o código ele grava assim, tem alguma forma de gravar cada coisa em uma linha?
L
Luis_Augusto_Santos1 like
Tem
pr.print("Numero da Agencia :"+numAge+"\n");pr.print("Numero da Conta :"+numConta+"\n");pr.print("Saldo :"+saldo+"\n");pr.println("Nome:"+nome);
Uma alternativa seria gravar tudo em uma única linha, separando por “,” ou “;”
pr.print("Numero da Agencia :"+numAge+";");pr.print("Numero da Conta :"+numConta+";");pr.print("Saldo :"+saldo+";");pr.println("Nome:"+nome+";");//Aquicoloca-seo;eo\nparaindicarotérminodalinha
Caso não haja necessidade de abrir o arquivo para leitura, fora do programa, eu optaria por mudar as labels para algo mais simples
O risco dessa abordagem é que a informação a ser exibida sempre será referente ao último registro gravado.
Uma simples verificação por nome já resolve (dentro do while).
K
Katielen_Castro
Muito Obrigado Luis , vou tentar aqui ,qualquer coisa te falo
L
Luis_Augusto_Santos1 like
Ah sim, se optar pela abordagem de gravar tudo em uma linha, pode resolver o problema assim:
Agora não estou conseguindo imprimir na tela com JSF
L
Luis_Augusto_Santos
Veja que, na tela, você tem os atributos mapeados da seguinte maneira
<h:outputTextvalue="Número da Agência: "/><h:outputTextvalue="#{cadastro.numAge}"/><h:outputTextvalue="Número da Conta: "/><h:outputTextvalue="#{cadastro.numConta}"/><h:outputTextvalue="Nome do Usuário da Conta: "/><h:outputTextvalue="#{cadastro.nome}"/><h:outputTextvalue="Saldo Atual: "/><h:outputTextvalue="#{saque.saldo}"/>
Onde leu agência, precisa atribuir à variável numAge, onde leu conta, atribuir à variável numConta, onde leu nome, atribuir à variável nome.
K
Katielen_Castro
Vou tentar, que eu uso essas variaveis para outras coisas
L
Luis_Augusto_Santos
Eu me referi a estas variáveis por ser a única fonte de apresentação que encontrei.
Se precisa de algo diferente, talvez seja interessante criar um xhtml específico para isso.
publicStringgetNumConta(){returnnumConta;}publicvoidsetNumConta(StringnumConta){this.numConta=numConta;}publicvoidsetNumAge(intnumAge){this.numAge=numAge;}publicdoublegetSaldo(){returnsaldo;}publicStringgetAgencia(){returnagencia;}publicvoidsetAgencia(Stringagencia){this.agencia=agencia;}publicStringgetConta(){returnconta;}publicvoidsetConta(Stringconta){this.conta=conta;}publicStringgetAsaldo(){returnAsaldo;}publicvoidsetAsaldo(Stringasaldo){Asaldo=asaldo;}publicStringgetAnome(){returnAnome;}publicvoidsetAnome(Stringanome){Anome=anome;}publicvoidsetSaldo(doublesaldo){this.saldo=saldo;}publicdoublesaldo;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicintgetNumAge(){returnnumAge;}publicvoidgravar(){try{FileOutputStreamarquivo=newFileOutputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt",true);PrintWriterpr=newPrintWriter(arquivo);pr.print("AGENCIA:"+numAge+"\n");pr.print("CONTA:"+numConta+"\n");pr.print("SALDO:"+saldo+"\n");pr.println("NOME:"+nome);pr.close();arquivo.close();}catch(Exceptione){System.out.println("Erro escrever arquivo");}FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Mensagem de confirmação:","Gravado com sucesso!"));}publicvoidler()throwsFileNotFoundException{Scannersc;sc=newScanner(newFile("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt"));while(sc.hasNextLine()){agencia=sc.nextLine();conta=sc.nextLine();Asaldo=sc.nextLine();Anome=sc.nextLine();}sc.close();System.out.println("Nome: "+Anome.split(":")[1]);System.out.println("Agência: "+agencia.split(":")[1]);System.out.println("Conta: "+conta.split(":")[1]);System.out.println("Saldo: "+Asaldo.split(":")[1]);}
}
Estou fazendo assim, mas mesmo assim não está indo
L
Luis_Augusto_Santos
Neste caso, você pode ignorar esta parte do código. Era apenas para exemplificar.
Além disso, você está tentando exibir estes dados a partir deste botão?
Se sim, você precisa definir onde estes dados serão exibidos, utilizando a propriedade “update” do commandButton.
K
Katielen_Castro
Mas eu preciso que aparece na tela do Extrato da conta, já fiz de tudo esse negócio não da certo
L
Luis_Augusto_Santos
Vamos por partes.
Você dispara o evento clicando no botão “Ler”, certo? Esse evento direciona a tua requisição à página “Extrato da conta”?
K
Katielen_Castro
Não este botão ler eu só coloquei, para saber que ta imprimindo certo, seria só para mim não para o usuário. A página Extrato de conta é uma coisa separada
L
Solucao aceita
Luis_Augusto_Santos
Entendi, então você acessa a página extrado de conta e ela vem com os dados em branco, certo?
Isso ocorre por você não ter vinculado os valores referentes aos campos antes de carregar o xhtml.
Para resolver esse problema, você precisa utilizar a tag f:metadata