Para quem sabe MVC2

8 respostas
E

Galera bom dia !

Estou fazendo um sisteminha de uma livraria bem simples para fixar alguns conceitos de Struts com MVC2, o qual somente cadastrará, consultará, alterará e excluirá livros. Vamos lá por parte:(eu acho que é assim, mas me corrijam se eu estiver errado por favor.)

Camada Modelo:

1-Criei a minha classe Livros(bean):

package model.bean;

public class Livros {
	
	private String isbn;
	private String titulo;
	private int edicao;
	private int publicacao;
	private String descricao;
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public int getEdicao() {
		return edicao;
	}
	public void setEdicao(int edicao) {
		this.edicao = edicao;
	}
	public int getPublicacao() {
		return publicacao;
	}
	public void setPublicacao(int publicacao) {
		this.publicacao = publicacao;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}	
	
}

2-Criei a classe LivrosForm

package model.bean;

import org.apache.struts.action.ActionForm;

public class LivrosForm extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private Livros livros;
	
	//----------------------------------------------------------//
	
	public Livros getLivros() {
		return livros;
	}

	public void setLivros(Livros livros) {
		this.livros = livros;
	}		

}

Camada Controller:

1-Criei a classe LivrosController(estende Action). No entanto, agora é que vem o problema, eu devo criar uma classe para cada operação(inclusão, alteração, excluir e alteração) ou eu consigo implementar todas elas dentro desta mesmo ?

Conto com a ajuda de vocês ! Abraços !

8 Respostas

Giulliano

Seu problema não é com MVC2 em primeiro lugar. Mas sim com Design Patterns, é bom saber do que se fala quando falamos algo.

Para mexer com dados (clássico CRUD (Create, Read, Update, Delete)) você pode implementar uma Interface chamada DAO (Data access Object) que você mesmo cria com todos esses métodos necessários para suas operações. Depois vc cria uma classe que implemente esta interface e adiciona lógica nos métodos.

Feito isso você pode estudar o Design de Factory para criação de classes.

[]'s

(Desculpe se fui mal educado)

E

Giulliano:
Seu problema não é com MVC2 em primeiro lugar. Mas sim com Design Patterns, é bom saber do que se fala quando falamos algo.

Para mexer com dados (clássico CRUD (Create, Read, Update, Delete)) você pode implementar uma Interface chamada DAO (Data access Object) que você mesmo cria com todos esses métodos necessários para suas operações. Depois vc cria uma classe que implemente esta interface e adiciona lógica nos métodos.

Feito isso você pode estudar o Design de Factory para criação de classes.

[]'s

(Desculpe se fui mal educado)

O colega, eu já criei a minha classe que faz esse clássico(CRUD). Você não entendeu a minha dúvida, o que eu gostaria de saber como faço para eu tratar as requisições. O que eu tenho feito geralmente é criar uma classe que estende a action para receber os dados do formulário. Mas eu sei que estou fazendo errado, porque desta maneira toda requisição eu tenho que criar uma action.

aleck

http://csis.pace.edu/~bergin/mvc/mvcgui.html

E

galera, pensei que fosse uma dúvida simples entre Struts e MVC2, que qualquer programador com um pouquinho de conhecimento saberia esclarecer a minha dúvida, eu acho, mas valeu, vou tentar me virar aqui…Obrigadão !

Giulliano

Entendi sua dúvida… Na verdade o Struts (o primeiro) precisa que vc tivesse um action e um form para receber as requisições (até onde infelizmente eu mexi).

Você não quer criar uma acation para cada ação, certo ?

Eu não mexo mais com struts faz tempo, porém se vc conseguir pegar todas as requsições das suas JSP através de um único Action e delegar a função para uma action/model mais especifico seria bem melhor.

Nessa vc já teria implementado o FrontController e o DelegateBusiness (Patterns). E não precisaria implementar uma action para cada método. Só não vou te garanbtir que o FrameWork te permiti fazer isso pq eu realmente não sei. Mas isso com servlet facilmente, deve dar pra fazer assim tb…

[]'s

aleck

Realmente viajei na sua pergunta :slight_smile:

Você consegue implementar sim, porém a manutenção fica mais complicada, não custa nada criar uma classe separada para cada método.

http://www.roseindia.net/struts/ <= neste site tem o que vc quer com struts 1 e 2.

E
package controller.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.bean.Livros;
import model.bean.LivrosForm;
import model.dao.InterfaceLivrosDAO;
import model.dao.LivrariaDAO;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LivrosController extends Action {
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		//recebe o comando que especifica a operação
		String cmd = request.getParameter("cmd");
		
		//instancia o objeto de acesso a dados
		InterfaceLivrosDAO idao;
		
		//recebe os dados do formulário e adiciona ao objeto LivroBean
		LivrosForm livrosForm = (LivrosForm)form;
		Livros livro = livrosForm.getLivro();
		
		//------------------------------------------------------------//
		
		idao = new LivrariaDAO();
		
		if(cmd.equalsIgnoreCase("addLivro")){
			
			idao.salvar(livro);			
		}
		
		
		
		return mapping.findForward("ok");	
		
		
	}

}

Aí galera não sei se é uma boa prática mas consegui desta maneira. Que puder contribuir fique a vontade ! values !

jgbt

Tem gente que acha que forum é suporte e fica magoado quando não é respondido. As pessoas aqui não ganham nada p/ responder, e fazem de maneira expontanea quando podem… por isso relaxa.

Quanto a sua duvida, vc pode fazer das duas formas. Se suas Actions herdarem de Action, sim vc vai precisar de uma Action para cada requisição, pq sempre o metdo execute vai ser chamado, ou ter um campo hidden na sua pagina que vai dizer qual ação do CRUD vc quer fazer, mas isso fica muito feio.
Ou vc pode fazer suas Actions herdarem de DispatchAction, dae vc pode indicar qual metodo da dentro da sua Action vc quer executar.
No link passado antes, http://www.roseindia.net/struts/ tem exemplos do que vc qer fazer.

[]´s

Criado 4 de março de 2008
Ultima resposta 4 de mar. de 2008
Respostas 8
Participantes 4