Vraptor 3 + Boleto - [RESOLVIDO]

2 respostas
salmaox

Boa Noite,

Gostaria de uma ajuda para conseguir enviar os dados do aluno para o método geraBoleto() da classe BoletoHsbc. Ao clicar no link “Gerar Boleto” da view exibeDados.jsp ele irá gerar o pdf do boleto. A view exibeDados.jsp está trazendo a lista corretamente, no entanto não sei como enviá-la através do link para o método geraBoleto().

Muito obrigado

public class BoletoHsbc {

    static int codBanco;
    static Generator generator;

    private String getTime() {
        return new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime());
    }
    
	public void geraBoleto(Aluno aluno) {

   JBoletoBean jBoletoBean = new JBoletoBean();
   jBoletoBean.setDataDocumento(getTime());
   jBoletoBean.setAceite("NÃO");
   jBoletoBean.setNoDocumento(String.valueOf(aluno.getIdAluno()));
   jBoletoBean.setCedente("FERBIT ENSINO DE IDIOMAS LTDA   \t \t       03.655.813/0001-08");
   jBoletoBean.setCedenterecibo("FERBIT ENSINO DE IDIOMAS LTDA");
   jBoletoBean.setNomeSacado(aluno.getNome());
   jBoletoBean.setEnderecoSacado(aluno.getEndereco());
   jBoletoBean.setBairroSacado(aluno.getBairro());
   jBoletoBean.setCidadeSacado("Cruzeiro");
   jBoletoBean.setUfSacado(aluno.getEstado());
   jBoletoBean.setCepSacado(aluno.getCep());
   jBoletoBean.setCpfSacado(aluno.getCpf());
   jBoletoBean.setLocalPagamento("ATE O VENCIMENTO, PREFERENCIALMENTE NO HSBC");
   jBoletoBean.setLocalPagamento2("APOS O VENCIMENTO, SOMENTE NO HSBC");
   
   jBoletoBean.setInstrucao1("");
   jBoletoBean.setInstrucao2("Após o venc. cobrar valor do documento + 2% de multa e 1% a.m.juros de mora.");
   jBoletoBean.setInstrucao3("A promoção dos 40% só será válida para pagamento até o dia 21/11/2011");
   jBoletoBean.setInstrucao4("");
   
   jBoletoBean.setDataVencimento("21/11/2011");
   jBoletoBean.setParcela("001/001");
   jBoletoBean.setCarteira("CNR");
   jBoletoBean.setAgencia("3685390");
   
   jBoletoBean.setCodCliente("36853900"); //essa parte é Ag/Cód Cedente
   jBoletoBean.setNossoNumero(String.valueOf(aluno.getIdAluno()).concat(jBoletoBean.getTresUltimosNossoNumero(jBoletoBean.getNoDocumento(),    jBoletoBean.getAgencia(), jBoletoBean.getDataVencimento())), 15);

   jBoletoBean.setValorBoleto("14.99");
   Generator generator2 = new PDFGenerator(jBoletoBean,JBoleto.HSBC);
   JBoleto jBoleto = new JBoleto(generator2, jBoletoBean,JBoleto.HSBC);
   
   jBoleto.addBoleto();
   jBoleto.closeBoleto("boleto.pdf");
   
 }
}

Alunos Controller

@Resource
public class AlunosController {

	private final AlunoDAO dao;
	private final Result result;
	private final Validator validator;
	private final AlunoWeb alunoWeb;

	public AlunosController(AlunoDAO dao, Result result, Validator validator, AlunoWeb alunoWeb) {
		this.dao = dao;
		this.result = result;
		this.validator = validator;
		this.alunoWeb = alunoWeb;
	}

	/* Abre o formulário de login */
	@Get
	@Path("/acesso")
	public void loginForm() {
	}

	/* Executa o Login */
	@Post
	@Path("/acesso")
	public void acesso(Aluno aluno, String senha) {

		Aluno carregado = dao.carrega(aluno);
		alunoWeb.login(carregado);

		Validacao val = new Validacao(dao, validator);
		val.validaAcesso(aluno,senha);
		validator.onErrorUsePageOf(AlunosController.class).loginForm();

		result.redirectTo(this).exibeDados(aluno);
	}

	@Restrito
	@Path("/exibeDados")
	public List<Aluno> exibeDados(Aluno aluno) {
		return dao.carregaDadosAluno(aluno);
	}
	
	@Get
	@Path("/boleto")
	public void geraBoleto(Aluno aluno){
		BoletoHsbc hsbc = new BoletoHsbc();
		hsbc.geraBoleto(aluno);
		result.redirectTo(this).boletoGerado();
	}
	
	@Restrito
	public void boletoGerado(){}

	@Path("/logout")
	public void logout() {
		alunoWeb.logout();
		result.redirectTo(AlunosController.class).loginForm();
	}

exibeDados.jsp

<c:forEach items="${alunoList}" var="aluno">
	<p><span style="font-weight: bold;">Aluno(a):</span> ${aluno.nome}</p>
	<p><span style="font-weight: bold;">CPF:</span> ${aluno.cpf}</p>
	<p><span style="font-weight: bold;">Endereço:</span> ${aluno.endereco}</p>
	<p><span style="font-weight: bold;">Bairro:</span> ${aluno.bairro}</p>
	<p><span style="font-weight: bold;">Cidade:</span> ${aluno.cidade.descricao}</p>
	<p><span style="font-weight: bold;">UF:</span> ${aluno.estado}</p>
	<p><span style="font-weight: bold;">CEP:</span> ${aluno.cep}</p>
</c:forEach>
	<div style="color:red; font-weight: bold">EM CASO DE ALTERAÇÃO CADASTRAL (ENDEREÇO, TELEFONE) FAVOR ENTRAR EM CONTATO COM A 
	SECRETARIA</div>
	<div><span style="font-weight: bold;">Cruzeiro:</span> Rua Capitão Neco, 432 - Centro. Tel.: ([telefone removido]</div>
	<div><span style="font-weight: bold;">Guaratinguetá:</span> Av. Pedro de Toledo, 291 - Vila Paraíba. Tel.: ([telefone removido]</div>
	<div style="padding-top:10px; padding-bottom:10px">
<!--		<form action="<c:url value="boleto"/>" method="post" />-->
<!--			<input type="submit" value="Gerar Boleto" >-->
<!--		</form>-->
<a href="<c:url value="boleto"/>">Gerar Boleto</a>
	</div>

2 Respostas

R

Seria assim:

Na view você precisa passar algum parâmetro para o controler no link:

<a href="<c:url value="boleto/${aluno.id}"/>">Gerar Boleto</a>

Dessa forma o link ficaria: boleto/1, boleto/2.

No método geraBoleto você precisa recuperar esse aluno do banco (supondo que você tá usando banco) e dizer no @Path que você tem um dado a receber:

@Get  
@Path("/boleto/{aluno}")  
public void geraBoleto(Aluno aluno){
        Aluno alunoDoBanco = repositorioAluno.get(aluno); //Esse aluno já tem o ID necessário para ser buscado

        BoletoHsbc hsbc = new BoletoHsbc();  
        hsbc.geraBoleto(alunoDoBanco );  
        result.redirectTo(this).boletoGerado();  
}

Agora só não entendi a parte do boleto. Você tá gerando um PDF pra download? Se for você tem que escrever esse PDF no response.
Outra coisa (que sou meio suspeito pra falar) é que eu recomendo a você usar o Bopepo do JRimum. Inclusive lá no site já tem um exemplo de como usar com o VRaptor.

Se precisar, entra em contato com o pessoal da lista que eles te ajudam. Valeu

salmaox

Obrigado Romulinho! Consegui dessa forma.
Eu já utilizo o JBoleto em um sistema java desktop há 2 anos, e funciona perfeitamente bem. Estou agora implementando uma funcionalidade online.

Eu coloquei minha lista dentro de um form.

<c:forEach items="${alunoList}" var="aluno">
<input type="text" name="aluno.idAluno" value="${aluno.idAluno}">
	<p><span style="font-weight: bold;">Aluno(a):</span> <input type="text" name="aluno.nome" value="${aluno.nome}"></p>
	<p><span style="font-weight: bold;">CPF:</span>  <input type="text" name="aluno.cpf" value="${aluno.cpf}"> </p>
	<p><span style="font-weight: bold;">Endereço:</span> <input type="text" name="aluno.endereco" value="${aluno.endereco}"></p>
	<p><span style="font-weight: bold;">Bairro:</span> <input type="text" name="aluno.bairro" value="${aluno.bairro}"></p>
	<p><span style="font-weight: bold;">Cidade:</span> <input type="text" name="aluno.cidade" value="${aluno.cidade.descricao}"></p>
	<p><span style="font-weight: bold;">UF:</span> <input type="text" name="aluno.estado" value="${aluno.estado}"></p>
	<p><span style="font-weight: bold;">CEP:</span> <input type="text" name="aluno.cep" value="${aluno.cep}"></p>
</c:forEach>
@Post
	@Path("/boleto")
	public void geraBoleto(Aluno aluno) throws IOException{
		BoletoHsbc hsbc = new BoletoHsbc();
		hsbc.geraBoleto(aluno);
		result.redirectTo(this).boletoGerado();
	}

Muito obrigado pela atenção.

Abraços

Criado 9 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 2
Participantes 2