Qual framework escolher? V-Raptor 3, NextFramework ou Struts2

25 respostas
C

Olá gujeiros, estou desenvolvendo um sistema para meu TCC e inicialmente estou utilizando JSP + Servlets mas estou achando um pouco trabalhoso e repetitivo criar aquele punhado de servlets. Todo o layout já tenho pronto e foi desenvolvido utilizando Dreamweaver, não pretendo utilizar Hiberanate. Vi umas video-aulas gratuitas de Struts2 nesse link http://www.devmedia.com.br/cursos/listcurso.asp?curso=127 , inicialmente gostei do framework mas pelo que vi ele utiliza umas tags próprias para os formulários. Gostaria da opinião de vocês qual desses frameworks tem uma boa integração com as páginas que já criei em HTML e vou transformá-las para páginas JSP?

25 Respostas

Lucas_Cavalcanti

o VRaptor3 não usa nenhuma taglib fora do padrão pra fazer as jsps, sugiro que vc dê uma olhada:

http://tinyurl.com/vr3doc

rogelgarcia

Fala meu caro cristiano… fico feliz que colocou o Next como uma das opções…

Eu votaria no Next… heheh… nem um pouco suspeito…

Seguinte… o Next possui as suas próprias tags… mas vc pode usar HTML puro nas páginas… ou inclusive… misturar o HTML com as tags do Next…

Fica a seu criterio… como voce está fazendo um trabalho de monografia… eu nao sei se a sua intençao é mostrar o HTML da página… se for esse o caso o Next nao te impede disso…

Se a sua intençao é utilizar alguma tag para facilitar algum trabalho… como um datagrid… o Next poderá te ajudar com as tags dele…

Ou poderá usar o sistema de templates do next… para facilitar a criacao das suas páginas… esse sistema de templates é o que permite ao Next ter JSPs bem pequenos no entanto funcionais…

Se quiser também tem o fórum do next está a disposicao para ajudar…

Fale mais sobre seu trabalho que assim posso dizer o que seria melhor…

Mas um ajuste ou outro no seu HTML será necessário para integrar com as partes do servidor… como controllers… e tal…

Obrigado

Até mais

UMC

Testa cada um em pequenas aplicações só pra ver o resultado! disso você escolhe a melhor!

VLW

C

rogelgarcia:
Fala meu caro cristiano… fico feliz que colocou o Next como uma das opções…

Eu votaria no Next… heheh… nem um pouco suspeito…

Seguinte… o Next possui as suas próprias tags… mas vc pode usar HTML puro nas páginas… ou inclusive… misturar o HTML com as tags do Next…

Fica a seu criterio… como voce está fazendo um trabalho de monografia… eu nao sei se a sua intençao é mostrar o HTML da página… se for esse o caso o Next nao te impede disso…

Se a sua intençao é utilizar alguma tag para facilitar algum trabalho… como um datagrid… o Next poderá te ajudar com as tags dele…

Ou poderá usar o sistema de templates do next… para facilitar a criacao das suas páginas… esse sistema de templates é o que permite ao Next ter JSPs bem pequenos no entanto funcionais…

Se quiser também tem o fórum do next está a disposicao para ajudar…

Fale mais sobre seu trabalho que assim posso dizer o que seria melhor…

Mas um ajuste ou outro no seu HTML será necessário para integrar com as partes do servidor… como controllers… e tal…

Obrigado

Até mais

Rogel o que preciso mesmo é algum framework que tenha fácil integração com JSP e HTML, e que permita que eu tenha um código limpo sem aquele punhado de servlets. Quero também evitar muitas mudanças na parte visual que já está praticamente pronta. O sistema que estou desenvolvendo é um e-commerce básico, como meu cliente trabalha com produtos sob medida o cliente que acessar o site poderá visualizar todos os produtos disponíveis adicionar ao carrinho de compras e solicitar um orçamento, este orçamento será aprovado pelo meu cliente, após isso o visitante do site poderá efetuar a compra on-line. O sistema vai ter também um módulo gerencial para as vendas da loja física e uma parte onde o gerente da empresa terá acesso a diversos relatórios gerenciais com indicadores no estilo Meter do Ireport utilizando conceitos de BI. Meu sistema em resumo seria um e-commerce com um “mini” BI.

rogelgarcia

Bem… no Next… o código costuma ser bem limpo… e como eu disse a integraçao do JSP com HTML é trivial… é só usar o HTML na página… e voce tem a opcao de usar as tags do next…

De qualquer forma… qualquer JSP por padrao… vc pode colocar HTML a vontade… o vraptor nao terá o conjunto de tags de auxilio… o struts terá algumas tags… mas no mesmo caso do next. vc pode usar o HTML misturado…

Pela experiencia que eu tenho de desenvolvimento… vc ter o HTML já pronto e tentar usar esse HTML nas páginas nao é muito legal… pois vc terá muito CTRL+C CTRL+V…

O mais interessante é montar um header comum e um footer comum e ter algum CSS para estilizar as partes das páginas…

O Next tem um sistema onde vc pode ter um base.jsp que terá esse header e o footer comum para as páginas… e vc pode ainda usar um arquivo de CSS…

Pelo que vejo do seu trabalho… vc terá vantagens com o Next se for usar as tags ou o sistema de templates… se nao… usar o vraptor ou struts ou next… será praticamente a mesma coisa…

Eu dou preferencia ao Next e Vraptor por eles serem baseados em Spring… ou até o Spring puro (mas no caso do Spring puro vc terá que fazer uma série de configuracoes)…

Voce tem que levar em consideracao que para usar um framework… vc precisará aprende-lo e isso gasta um determinado tempo… que pode ser compensado pela produtividade oferecida…

Talvez seja interessante fazer igual o UMC falou… faz um pequeno teste com cada um…

Se quiser falar aqui qual foi a sua experiencia em cada posso ajudar… caso tenha alguma dúvida…

Até mais

Estou escrevendo alguns tutoriais sobre o Spring… mas ainda nao cheguei na parte de MVC… se vc quiser ver como funciona…
Hello World com Spring 3 para um projeto WEB
http://www.javaframework.org/portal/2010/03/14/hello-world-com-spring-3-para-um-projeto-web/

Iniciando com Hibernate 3 utilizando Annotations
http://www.javaframework.org/portal/2010/03/17/iniciando-com-hibernate-3-utilizando-annotations/

rogelgarcia

Voce disse que nao utilizará Hibernate… mas como voce vai persistir os produtos, clientes, compras, etc da loja?

rogelgarcia

Tá rolando uma discussão nesse tópico…

Qual o menor JSP possível?
http://www.guj.com.br/posts/list/202210.java

Já tem lá alguns exemplos de código… e talvez possam surgir novas informações… que possam ajudar no seu trabalho.

C

Rogel na verdade já tentei utilizar Hibernate, mas tava quebrando a cabeça em fazer uma chave primária concatenada e os relacionamento one-to-many e many-to-one. Eu estava criando os hbm, mas como eu tinha que entregar um protótipo do meu sistema com uma funcionalidade completa e tava apertado o prazo acabei jogando tudo pro alto e fazendo tudo na mão. Estava lendo um artigo de Hibernate Annotations e achei mais fácil, acho que até vou tentar fazer algo.

rogelgarcia

Iniciando com Hibernate 3 utilizando Annotations
http://www.javaframework.org/portal/2010/03/17/iniciando-com-hibernate-3-utilizando-annotations/

No Next usar o hibernate é facil demais tb… mais fácil do que usar o hibernate sozinho…

Chave primaria concatenada… vc fala chave primaria com vários campos?

C

rogelgarcia:
Bem… no Next… o código costuma ser bem limpo… e como eu disse a integraçao do JSP com HTML é trivial… é só usar o HTML na página… e voce tem a opcao de usar as tags do next…

De qualquer forma… qualquer JSP por padrao… vc pode colocar HTML a vontade… o vraptor nao terá o conjunto de tags de auxilio… o struts terá algumas tags… mas no mesmo caso do next. vc pode usar o HTML misturado…

Pela experiencia que eu tenho de desenvolvimento… vc ter o HTML já pronto e tentar usar esse HTML nas páginas nao é muito legal… pois vc terá muito CTRL+C CTRL+V…

O mais interessante é montar um header comum e um footer comum e ter algum CSS para estilizar as partes das páginas…

O Next tem um sistema onde vc pode ter um base.jsp que terá esse header e o footer comum para as páginas… e vc pode ainda usar um arquivo de CSS…

Pelo que vejo do seu trabalho… vc terá vantagens com o Next se for usar as tags ou o sistema de templates… se nao… usar o vraptor ou struts ou next… será praticamente a mesma coisa…

Eu dou preferencia ao Next e Vraptor por eles serem baseados em Spring… ou até o Spring puro (mas no caso do Spring puro vc terá que fazer uma série de configuracoes)…

Voce tem que levar em consideracao que para usar um framework… vc precisará aprende-lo e isso gasta um determinado tempo… que pode ser compensado pela produtividade oferecida…

Talvez seja interessante fazer igual o UMC falou… faz um pequeno teste com cada um…

Se quiser falar aqui qual foi a sua experiencia em cada posso ajudar… caso tenha alguma dúvida…

Até mais

Estou escrevendo alguns tutoriais sobre o Spring… mas ainda nao cheguei na parte de MVC… se vc quiser ver como funciona…
Hello World com Spring 3 para um projeto WEB
http://www.javaframework.org/portal/2010/03/14/hello-world-com-spring-3-para-um-projeto-web/

Iniciando com Hibernate 3 utilizando Annotations
http://www.javaframework.org/portal/2010/03/17/iniciando-com-hibernate-3-utilizando-annotations/

Entrei no site do NextFramework, li uma parte da documentação e assisti algumas vídeo-aulas, me impressionei com a facilidade que o framework oferece na criação dos formulários e validações. No quesito de layout vou tentar dar uma adaptada e modificada no CSS do next para ficar no padrão da minha aplicação, vou fazer uns testes com o NextFramework para tirar as conclusões. Obrigado pelas dicas.

rogelgarcia

Se tiver duvidas… pode me perguntar aqui… ou no fórum do next…

rogelgarcia

No next… além de mecher no CSS… vc pode mecher no template também… aí vc faz do jeito que quiser mesmo a aplicacao

C

rogelgarcia:
Iniciando com Hibernate 3 utilizando Annotations
http://www.javaframework.org/portal/2010/03/17/iniciando-com-hibernate-3-utilizando-annotations/

No Next usar o hibernate é facil demais tb… mais fácil do que usar o hibernate sozinho…

Chave primaria concatenada… vc fala chave primaria com vários campos?

Exato, chave com vários campos, tenho uma tabela chamada Venda, onde a chave primária dela é composta pelo código do funcionário, código do vendedor, código do orçamento e código do cliente. Já tenho uma idéia de como fazer usando hibernate annotations.

C

Vi o tutorial que mostra a criação de um Crud e percebi que ao utilizar as tags do next para criar o formulário não há necessidade de criar as actions de inserção, exclusão e alteração. No meu caso se eu criar um formulário JSP que utiliza tags HTML eu teria que criar todas as actions e sobrescrever os métodos CrudController e Service?

rogelgarcia

Depende do que vc vai querer… se as actions padrao já servirem vc nao sobrescreve nada… que geralmente é o que é feito…

Se vc tem que sobrescrever tudo… talvez um MultiActionController seja mais interessante… assim vc define quais actions vai querer…

EXTREMAMENTE RECOMENDADO: Não utilize chaves primarias compostas… use um ID que nao tenha nenhum significado na aplicacao… (surrogate key) Com isso vc evita toneladas de problemas…

C

Certo, mas se eu crio um formulário JSP sem usar as tags do next eu tenho que definir qual action ele vai executar ao receber um submit certo? Neste caso se eu tiver um formulário que insere algo no banco qual action do next devia chamar?

rogelgarcia

Certo… basta vc passar o parametro ACAO… exemplo ACAO=criar

Se vc quiser fazer um link para determinado controler. para ele criar um objeto… vc faz assim:

novo

A classe AbstractCrudController… é que define as acoes possiveis… para um crud

Algumas tags… .possuem templates… por exemplo a tag t:listagem… possui um template chamado ListagemTag.jsp

Esses templates estarao no pacote org.nextframework.view.template no código fonte do Next…

Voce pode abrir esses JSPs para ver o que eles renderizam… e inclusive copiar para sua aplicacao… e alterar o funcionamento padrao deles… o Next reconheçe se vc quer “sobrescrever” algum template

C

Certo… basta vc passar o parametro ACAO… exemplo ACAO=criar

Se vc quiser fazer um link para determinado controler. para ele criar um objeto… vc faz assim:

novo

A classe AbstractCrudController… é que define as acoes possiveis… para um crud

Algumas tags… .possuem templates… por exemplo a tag t:listagem… possui um template chamado ListagemTag.jsp

Esses templates estarao no pacote org.nextframework.view.template no código fonte do Next…

Voce pode abrir esses JSPs para ver o que eles renderizam… e inclusive copiar para sua aplicacao… e alterar o funcionamento padrao deles… o Next reconheçe se vc quer “sobrescrever” algum template

Ok, já tenho um link desse que você exemplificou que ao clicar chama a tela para a inserção de dados com um botão chamado “Salvar”, só que ao clicar nesse botão o formulário deve executar uma action que vai capturar os dados do formulário e fazer o INSERT correto? Dei uma olhada no código-fonte do Next na classe AbstractCrudController e achei o trecho a segui:

@Action(CRIAR) @OnErrors(LISTAGEM) public abstract ModelAndView doCriar(WebRequestContext request, FORMBEAN form) throws CrudException;

Talvez eu esteja errado mas para realmente executar a inserção o meu Bean deveria estender a classe AbstractCrudController que solicita os parâmetros “FILTRO” “FORMBEAN”. Quais as informações que devo passar como parâmetro? A ação desejada como “doCriar” e o nome do meu formulário JSP?

D

Se precisar ser em Java, nenhum desses. Nada contra seus autores, mas temos coisas melhores e mais simples.
Pense em Grails. Mas se puder pular fora e ficar com Ruby, fique Rails. Só não cito JRuby porque ainda acho ele um pouco lento para interpretar o Rails, mas tá quase lá e, se não tiver problemas de performance, pense no caso.

Lavieri

Eu uso vraptor, e sou feliz… a curva de aprendizado é baixa, a documentação é alta, e a comunidade é bem disposta a ajudar, inclusive um dos lideres do projeto (lucas) que esta sempre pelo forum tirando duvidas.

Existe apostalia de treinamento do Caelum de graça ensinando a usar, o site é muito bem documentado…

vale a pena olhar http://vraptor.caelum.com.br/documentacao/vraptor3-guia-de-1-minuto/

Fica ai dica e sugestão… boa sorte na escolha… já usei vraptor em mais de 20 projetos e sou feliz ^^

rogelgarcia

O melhor no seu caso… é seguir o tutorial em video do Crud… e então aplicar os estilos… assim voce entenderá como funciona cada operacao

A acao criar irá apenas direcionar para criar uma tela com dados em branco… e depois voce chama a acao salvar para persistir os dados

Vamos supor que voce tenha um bean chamado Venda…

Voce terá o bean normal… e criará um controller VendaCrud… assim:

public class VendaCrud extends CrudController<FiltroListagem, Venda, Venda>{
}

É possível que voce nao precise implementar nenhum código…

Voce chegou a ver os videos de CRUD? Se nao… assiste lá que vai esclarecer muitas dúvidas…

Até mais… se precisar é só perguntar…

C
Já assisti os tutoriais. Acontece que se eu tenho um formulario de cadastro dessa forma:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="n" uri="next"%>
<%@ taglib prefix="t" uri="template"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
<form >
<table style="width: 100%;">
	<tr>
		<td align="center">Nome   <input type="text" size="30" name="nome"></td>
	</tr>

	<tr>
		<td align="center">Sigla  <input type="text" size="30" name="sigla"></td>
	</tr>

	<tr>
		<td colspan=2 align=center><input type=submit value="Enviar">
	</tr>
</table>
</form>
</body>
</html>
Um JSP de listagem assim:
<%@ taglib prefix="n" uri="next"%>
<%@ taglib prefix="t" uri="template"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<t:listagem>
	<t:janelaResultados>
		<t:tabelaResultados>
			<t:property name="id"/>
			<t:property name="nome"/>
			<t:property name="sigla"/>
		</t:tabelaResultados>
	</t:janelaResultados>
</t:listagem>
Crud:
package org.neoframework.exemplo.controller;

import org.neoframework.exemplo.bean.Uf;
import org.nextframework.controller.crud.CrudController;
import org.nextframework.controller.crud.FiltroListagem;
import org.nextframework.controller.*;

@Controller(path="/modulo2/crud/Uf")
public class UfCrud extends CrudController<FiltroListagem, Uf, Uf> {

}
Bean:
Integer id;
	String nome;
	String sigla;
	
	@Id
	@GeneratedValue
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Required
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Required
	@MaxLength(2)
	public String getSigla() {
		return sigla;
	}
	public void setSigla(String sigla) {
		this.sigla = sigla;
	}
Dao:
package org.neoframework.exemplo.dao;

import org.neoframework.exemplo.bean.Uf;
import org.nextframework.persistence.GenericDAO;

public class UfDAO extends GenericDAO<Uf> {

}
Service:
package org.neoframework.exemplo.service;

import org.neoframework.exemplo.bean.Uf;
import org.nextframework.service.GenericService;

public class UfService extends GenericService<Uf> {

}
Acontece que lá na minha primeira página JSP não sei qual action do Next chamar. Como pode notar estou usando JSP comum pra montar a parte View.
rogelgarcia

Saquei..

No seu JSP de entrada de dados.. vc vai fazer na tag form.. assim:

<form action="${application}/modulo2/crud/uf">

E voce coloca um hidden... para indicar qual método

<input type="hidden" name="ACAO" value="salvar"/>

Mas porque vc nao usa a tela de entrada de dados.. usando as tags... assim sua tela de entrada de dados ficaria assim:

<%@ taglib prefix="n" uri="next"%>  
<%@ taglib prefix="t" uri="template"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  
<t:entrada>
	<t:janelaEntrada>
		<t:tabelaEntrada>
			<t:property name="id"/>
			<t:property name="nome"/>
			<t:property name="sigla"/>
		</t:tabelaEntrada>
	</t:janelaEntrada>
</t:entrada>
rogelgarcia

Esse ${application} é o path da aplicação… (context path)

C
rogelgarcia:
Saquei..

No seu JSP de entrada de dados.. vc vai fazer na tag form.. assim:

<form action="${application}/modulo2/crud/uf">

E voce coloca um hidden... para indicar qual método

<input type="hidden" name="ACAO" value="salvar"/>

Mas porque vc nao usa a tela de entrada de dados.. usando as tags... assim sua tela de entrada de dados ficaria assim:

<%@ taglib prefix="n" uri="next"%>  
<%@ taglib prefix="t" uri="template"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  
<t:entrada>
	<t:janelaEntrada>
		<t:tabelaEntrada>
			<t:property name="id"/>
			<t:property name="nome"/>
			<t:property name="sigla"/>
		</t:tabelaEntrada>
	</t:janelaEntrada>
</t:entrada>

O código que você passou funcionou perfeitamente, obrigado :D . O motivo de eu não usar a tela de entrada de dados do Next é porque já tenho toda a parte visual pronta.

Criado 27 de março de 2010
Ultima resposta 31 de mar. de 2010
Respostas 25
Participantes 6