TagLib + MVC = incompatibilidade?

10 respostas
R

Estou com a seguinte situação:

estou fazendo o projeto final(Projeto Java Web)para a faculdade utilizando o modelo MVC.

Estou tendo uma dificultade muito grande em transformar um ResultSet em um ArrayList, por que não posso passar um ResultSet para o JSP diretamente. Para isto adotei o Taglib que exibe informações no JSP. Com isso, utilizo uma classe do modelo como repositório das informações temporário, por exemplo usuario:

Usuario

{

String idusuario;
public Usuario(){}
public setIdusuario(String id){idusuario = id;}
public getIdusuario(String id){return idusuario;}
public ArrayList mostraTodosUsuariosBanco()
{
	ArrayList lista = new ArrayList();
	ResultSet rs = banco.criaconexao("select idusuario form usuario");
	while(rs.next())
	{
		Usuario usu = new Usuario();
		usu.setIdusuario(rs.getString(1));
		lista.add(usu);
	}
	return lista;
}

}

ObS: ou seja, crio os usuários, coloco os ids nos usuarios e jogo na lista.

Essa lista vai para o JSP e eu consigo visualizar os dados através do Taglib:

<c:out var=“usu” items=“lista”/>
<C:out value=“usu.idusuario”/>

Pergunta:

Estou infringindo o modelo MVC? E se alguém me perguntar: vc stá utilizando a classe de negócios numa lista e posteriormente exibindo no JSP? eu diria que sim. isto está errado? Esta classe de negócio, depois que a taglib a acessa se transforma em uma espécie de objeto qualquer? Isto pode ser verdade pois o JSP não conhece os métodos de Usuario e nem poderia utilizar.

Está errado?

Obrigado!!!

Renato Isidio 8O

10 Respostas

J

O fato de os dados estarem nessa classe Usuario e você enviar ela para o JSP está certo, afinal os dados tem que ir para o JSP de alguma forma né?!!!

O que está errado é esse codigo de acesso ao banco aí dentro da classe Usuario, isso deveria estar em um DAO.

No meu site tem uma aplicação de loja virtual, dê uma olhada nela lá… no seu caso seria só substituir o codigo Hibernate por JDBC que ficaria como você quer.

R

Por exemplo:

se passo para um JSP um ResultSet e dentro do JSP chamasse scriptlets para exibir estas informações do ResultSet, isto está errado, né?

desta forma que fiz, através de ArrayList (objetos) está correta?

Abraços… e muito obrgado!

Renato Isidio

J

Sim.

Sim. Tirando o fato de a regra estar dentro da classe Usuario.

R

Desculpe-me, mas que regra?

[]s[/quote]

J

Essa:

Usuario{
String idusuario;

public Usuario(){}

public setIdusuario(String id){idusuario = id;}

public getIdusuario(String id){return idusuario;}

public ArrayList mostraTodosUsuariosBanco()

{

ArrayList lista = new ArrayList();

ResultSet rs = banco.criaconexao(select idusuario form usuario);

while(rs.next())

{

Usuario usu = new Usuario();

usu.setIdusuario(rs.getString(1));

lista.add(usu);

}

return lista;

}

}</blockquote>

Como eu disse, isso deveria estar em um DAO.

Nessa classe deve ter apenas os atributos e os metodos get e set.

R

Jair,

muito obrigado!!!

abraços!!!

Renato Isidio

P

Olás

estou fazendo algo bem parecido, no entanto, separei o código.

análogamente tenho um bean usuário e, ao acessar uma página JSP e pedir para listar usuários, ela invoca um servlet que instancia o usuário, conecta o banco e cria um arrayList de usuários

é aí q pega; ainda não consegui passar esse array de objetos para o JSP ao qual o forward() do servlet está associado

o objeto HttpServletResponse parece não ter métodos para devolver arrays e/ou objetos

não estou usando taglibs nem qualquer framework, estou tentando implementar os conceitos de MVC antes para entender as particularidades

vlw
abs

J

O objeto que contem os metodos para você colocar atributos é o da classe HttpServletResquest:

[code]request.setAttribute("usuarios", arrayusuarios);[/quote]

ou você pode usar a sessão:

[code]HttpSession sessao = (HttpSession) request.getSession();

sessao.setAttribute("usuarios", arrayusuarios);[/code]

P

Blz, deu certo :slight_smile:

Me parece ser uma quebra de paradigma isso pois, normalmente, esse atributo teria q ser enviado na saída (response). Response então é usado basicamente para imprimir conteúdo na página destino?

abs

J

Ele não é enviado na saída, ele chega no request, nesse caso você está usando o mesmo request para chamar outra pagina, digamos que seu Servlet pegue o request no meio do caminho e dê uma “incrementada” nele, depois passe para a pagina, o response é o que é enviado para o cliente, colocar nele é que não faria sentido já que esse objeto nunca irá para o cliente, sendo que ele nunca sai do servidor.

Criado 10 de julho de 2006
Ultima resposta 16 de jul. de 2006
Respostas 10
Participantes 3