Lógica de negócios sobre uma exibição de banner.. Complicado :(

2 respostas
betonit

Pessoal,

Espero q consiga transmitir o meu problema para vcs…

Abaixo, está a classe GerenciarVisitas() o metodo mostrarBanner que tem como objetivo, escolher uma exibicao do banner e retornar uma string urlImagem populando a exibicao…

package sgb.nucleo.gerenciadores;

import java.util.Collection;

import sgb.nucleo.exibicao.Banner;
import sgb.nucleo.exibicao.Exibicao;
import sgb.nucleo.exibicao.SeletorBanner;
import sgb.nucleo.exibicao.Site;
import sgb.nucleo.persistencia.BannerDao;
import sgb.nucleo.persistencia.Dao;
import sgb.nucleo.persistencia.ErroArmazenamentoException;
import sgb.nucleo.persistencia.ExibicaoDao;
import sgb.nucleo.persistencia.SiteDao;

public class GerenciarVisitas {

	// Criando as constantes necessárias
	public static String FIGURA_PADRAO = "http://127.0.0.1:8080/sgb.gif";
	public static String DESTINO_PADRAO = "0;";
	public static String REDIRECIONADOR = "http://localhost/sgb/visoes/redirecionar.jsp?cd=";
	public static String ERRO_CLICK = "http://127.0.0.1:8080/erro.sgb";

	private Banner banner = new Banner();
	private Exibicao exibicao = new Exibicao();

	public GerenciarVisitas() {
		banner.setUrlImagem(FIGURA_PADRAO);
		banner.setUrlDestino(DESTINO_PADRAO);
		exibicao.setBanner(banner);
	}

	public String mostrarBanner(String codigoSite) {

		/**
		* Este método *NÃO* pode gerar um erro, do contrario a imagem não vai aparecer 
		* (e provavelmente o layout do cliente vai ser destruído).
		* Se efetivamente acontecer algo errado, devolva uma URL de uma	imagem default, mas devolva algo!
		* */

		String resposta = FIGURA_PADRAO;

		try {
			Dao daoSites = new SiteDao();

			// Descubra qual site foi acessado baseado no codigo dele
			Site siteAcessado = new Site();
			siteAcessado.setCodSite(Integer.parseInt(codigoSite));
			siteAcessado = (Site) daoSites.buscar(siteAcessado);

			// Pegue todas as exibições cadastradas para este site
			ExibicaoDao daoExibicoes = new ExibicaoDao();
			Collection exibicoesDoSite = daoExibicoes.buscarPorSite(siteAcessado);

			Exibicao escolhido = SeletorBanner.escolher(exibicoesDoSite);

			if (escolhido != null) {
				exibicao.setCodExibicao(escolhido.getCodExibicao());
				banner = escolhido.getBanner();
				resposta = escolhido.getBanner().getUrlImagem();
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			return resposta;
		}
	}

	public String getUrlDestino(String codigoBanner) {
		String resposta = ERRO_CLICK;

		try {
			Dao dao = new BannerDao();
			banner = new Banner();
			banner.setCodBanner(Integer.parseInt(codigoBanner));
			banner = (Banner) dao.buscar(banner);
			resposta = banner.getUrlDestino();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resposta;
	}

	public String getUrlDestino() {
		return REDIRECIONADOR + banner.getCodBanner();
	}

	public void acumularClick(Exibicao exibicao) throws ErroArmazenamentoException {
		ExibicaoDao dao = new ExibicaoDao();
		dao.aumentarClick(exibicao);
	}
}

Meu problema começa agora:

public class MostrarBannerAcao implements Acao, DesabilitarSeguranca {

	public void executar(Requisicao req, Resposta resp) throws MvcException {

		RespostaHttp resposta = (RespostaHttp) resp;
		RequisicaoHttp requisicao = (RequisicaoHttp) req;

		HttpServletRequest request = requisicao.getHttpRequest();
		HttpServletResponse response = resposta.getHttpResponse();

		String codSite = (String) requisicao.getAtributo("codSite");

		//Instanciar o Gerenciador...
		Exibicao exibicao = new Exibicao();
		Banner banner = new Banner();
		GerenciarVisitas gerenciador = new GerenciarVisitas();

		banner.setUrlImagem(gerenciador.mostrarBanner(codSite));
		banner.setUrlDestino(gerenciador.getUrlDestino());
		//exibicao = (Exibicao) gerenciador;

		// Guarda a exibicao em request
		request.setAttribute("exibicao", exibicao);

		redirecionar("/visoes/mostraBanner.jsp", request, response);

	}

        private void redirecionar(String jspAlvo, HttpServletRequest req, HttpServletResponse resp) {

		try {
			req.getRequestDispatcher(jspAlvo).forward(req, resp);
		} catch (Exception e1) {
			//Não deveria chegar aqui
			e1.printStackTrace();
		}
	}

}

Preciso passar a minha jsp, o meu obj exibicao populado na qual este possua um objeto banner tb populado (exibicao.getBanner().getUrlDestino() ) vindo do GerenciarVisitas mas há algo errado na minha implementacao q n consigo detectar… ja debuggei e nada…

Se for possivel, gostaria q me ajudassem!
Obrigado,
Beto.

2 Respostas

louds

Olhando de forma rápida parece estar faltando algo como:

exibicao.setBanner(banner);
Ironlynx
BetO,isso são constantes(imutáveis?):
// Criando as constantes necessárias
	public static String FIGURA_PADRAO = "http://127.0.0.1:8080/sgb.gif";
	public static String DESTINO_PADRAO = "0;";
	public static String REDIRECIONADOR = "http://localhost/sgb/visoes/redirecionar.jsp?cd=";
	public static String ERRO_CLICK = "http://127.0.0.1:8080/erro.sgb";
Cadê o FINAL?
Dao daoSites = new SiteDao();
Não ponha o nome de um padrão como classe, isso confunde...(Dao é uma interface certo?) Me explique o que vc quis fazer com esse método:
public String getUrlDestino(String codigoBanner) {
		String resposta = ERRO_CLICK;

		try {
			Dao dao = new BannerDao();
			banner = new Banner();
			banner.setCodBanner(Integer.parseInt(codigoBanner));
			banner = (Banner) dao.buscar(banner);
			resposta = banner.getUrlDestino();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resposta;
	}
pelo erro_click saquei pq as variáveis não são final... Vc fez debug "método a método"?O q o seu getUrlDestino tah te retornando?
Criado 10 de dezembro de 2004
Ultima resposta 12 de dez. de 2004
Respostas 2
Participantes 3