Qual é o menor JSP possível?

Num mundo ideal, qual seria o menor JSP, ou melhor estruturado, possível para fazer uma listagem de dados?

Por exemplo… uma tabela com alguns campos… paginaçao… ordenaçao e botoes para editar ou excluir o registro… e algum estilo

(Suponha uma listagem de Aluno onde os campos sejam nome, matricula, data de nascimento e cpf)

Se fizéssemos com JSTL usando algum estilo e com os links, seria mais ou menos assim:

<TABLE class="datatable">
		<tr class="title">
			<td><a href="/controler/listagem?orderby=nome">Nome</a></td>
			<td><a href="/controler/listagem?orderby=matricula">Matricula</a></td>
			<td><a href="/controler/listagem?orderby=dataNascimento">Data de nascimento</a></td>
			<td><a href="/controler/listagem?orderby=cpf">Cpf</a></td>
			<td>Ação</td>
		</tr>
	<c:forEach var="aluno" items="${listaAluno}" varStatus="status">
		<tr class="${status % 2 == 0? 'linhaPar' : 'linhaImpar'}">
			<td>${aluno.nome}</td>
			<td>${aluno.matricula}</td>
			<td><fmt:formatDate value="${aluno.dataNascimento}" pattern="dd/MM/yyyy"/></td>
			<td>${aluno.cpf}</td>
			<td>
				<a href="/controler/editar/${aluno.id}">Editar</a>
				<a href="/controler/excluir/${aluno.id}">Excluir</a>
			</td>
		</tr>
	</c:forEach>
</TABLE>

E num mundo ideal? Como seria?

Como ficaria o JSP na ferramenta que vocês utilizam?

Eu acho q vc ta com vontade de nos mostrar como faz no NExt neh? hauahauha… mostra ai vai!

eu usuria um extended data table do richfaces… já tem linha zebrada … e diminuiria consideravelmente o tamanho desse código ai…

É…

Mas eu gostaria que o pessoal pensasse um pouco… a intençao do tópico na verdade… é estimular o pensamento…

Quero ver a opiniao da galera e como o pessoal tá trabalhando…

Depois eu mostro como fica no Next… ehheeh

[quote=viniciusfaleiro]Eu acho q vc ta com vontade de nos mostrar como faz no NExt neh? hauahauha… mostra ai vai!

eu usuria um extended data table do richfaces… já tem linha zebrada … e diminuiria consideravelmente o tamanho desse código ai…[/quote]

Se tiver um exemplo… e quiser postar…

A intençao é ver as soluçoes mesmo… até pra eu ver também… tenho curiosidade

[quote][code]









<c:forEach var=“aluno” items="${listaAluno}" varStatus=“status”>







</c:forEach>
Nome Matricula Data de nascimento Cpf Ação
${aluno.nome} ${aluno.matricula} <fmt:formatDate value="${aluno.dataNascimento}" pattern=“dd/MM/yyyy”/> ${aluno.cpf}
Editar
Excluir
[/code][/quote] Talvez assim já ajudaria em um problema! E como séria com o NEXT? Pode postar?

vlw
abs

Qual problema seria resolvido??


No next seria assim:

<t:tabelaResultados>
      <t:property name="nome"/>
      <t:property name="matricula"/>
      <t:property name="dataNascimento"/>
      <t:property name="cpf"/>
</t:tabelaResultados>

[quote=rogelgarcia]Qual problema seria resolvido??


No next seria assim:

<t:tabelaResultados>
      <t:property name="nome"/>
      <t:property name="matricula"/>
      <t:property name="dataNascimento"/>
      <t:property name="cpf"/>
</t:tabelaResultados>

[/quote]
Qual problema seria resolvido??
Um problema em exibir dados em uma tabela!

Mas como os dados vem do Banco de Dados?!?!

vlw
abs

O controller coloca no escopo os dados…

E esse template t:tabelaResultados já sabe como recuperar esses dados…

O resto das informacoes necessárias são inferidas pelo framework…

Por exemplo… nao é necessário falar que o campo deve ser formatado como data… pois o tipo de dados dele já é Date…

Mas isso é o mínimo do framework… ele faz inferencias com dados mais complexos também… como relacionamentos @ManyToOne

Se quiser posso colocar exemplos mais complexos…

No caso… esse exemplo… monta a tabela com a paginacao… mas para seguir o padrao do framework… e ter moldura nas telas… estilo e umas coisas a mais… o jsp completo seria assim:

<t:listagem>
    <t:janelaResultados>
       <t:tabelaResultados>  
         <t:property name="nome"/>  
         <t:property name="matricula"/>  
         <t:property name="dataNascimento"/>  
         <t:property name="cpf"/>  
       </t:tabelaResultados>  
    </t:janelaResultados>
</t:listagem>

Esse é o template de uma página para fazer um CRUD (Create Read Update Delete)

Rapaz, realmente essa jsp ficou bem limpa … :slight_smile:

Displaytag é bacana e acho bem curta tirando o fato da ordenacao,paginacao não ser ajax…
Na minha opinião quanto menos coisa voce fala pior é …isso te acopla muito a ferramente em muitos cenarios…funciona bem desde que a complexidade não aumente…

[quote=rogelgarcia]O controller coloca no escopo os dados…

E esse template t:tabelaResultados já sabe como recuperar esses dados…

O resto das informacoes necessárias são inferidas pelo framework…

Por exemplo… nao é necessário falar que o campo deve ser formatado como data… pois o tipo de dados dele já é Date…

Mas isso é o mínimo do framework… ele faz inferencias com dados mais complexos também… como relacionamentos @ManyToOne

Se quiser posso colocar exemplos mais complexos…

No caso… esse exemplo… monta a tabela com a paginacao… mas para seguir o padrao do framework… e ter moldura nas telas… estilo e umas coisas a mais… o jsp completo seria assim:

<t:listagem>
    <t:janelaResultados>
       <t:tabelaResultados>  
         <t:property name="nome"/>  
         <t:property name="matricula"/>  
         <t:property name="dataNascimento"/>  
         <t:property name="cpf"/>  
       </t:tabelaResultados>  
    </t:janelaResultados>
</t:listagem>

Esse é o template de uma página para fazer um CRUD (Create Read Update Delete)
[/quote]
Cara realmente fiquei impressionado com NEXT e com quem o fez “você”!rsrs
Cara reduz uns +/- 90% de codificação!
está de parabéns!

Vou pedir um exemplo aqui que fiquei 3 semanas para resolve-lo!
Criar dos COMBO BOX Estado e Cidade!
Onde estado escolhido carrega as cidade referentes a ele!
Ex: Estado = São Paulo Cidades = São Paulo, Santos etc…
Pode ser??

vlw
abs

Pode… vc vai querer as entidades também ou nao precisa?

O código do JSP é assim:

<n:comboReloadGroup useAjax="true">
      <t:property name="cidade.estado"/>
      <t:property name="cidade"/>
</n:comboReloadGroup>

Poderia ter quantos níveis quisesse (colocando o país por exemplo)… na versão 3.5.1 que será a próxima já usará ajax por default

Obrigado pelo apoio!!!

:smiley:

Displaytag é bacana e acho bem curta tirando o fato da ordenacao,paginacao não ser ajax…
Na minha opinião quanto menos coisa voce fala pior é …isso te acopla muito a ferramente em muitos cenarios…funciona bem desde que a complexidade não aumente…
[/quote]

A vantagem no Next… é que vc pode trocar o template e adicionar os AJAX, inclusive depois do sistema estar pronto :smiley:

Tem alguns sistemas que eu fiz… que era ajax a navegaçao… Pra isso eu extendi o controller para adicionar uns códigos a mais de ajax… e os templates… o resto nao muda…

[quote=rogelgarcia]Pode… vc vai querer as entidades também ou nao precisa?

O código do JSP é assim:

<n:comboReloadGroup useAjax="true">
      <t:property name="cidade.estado"/>
      <t:property name="cidade"/>
</n:comboReloadGroup>

Poderia ter quantos níveis quisesse (colocando o país por exemplo)… na versão 3.5.1 que será a próxima já usará ajax por default
[/quote]
Incrível!
vc vai querer as entidades também ou nao precisa?
seria bom só pra eu ficar mais impressionado! rs
vlw

[quote=rogelgarcia]Obrigado pelo apoio!!!

:D[/quote]
De nada!
e como eu queria participar da nova versão! rs
:smiley: :smiley:
vlw
abs

As entidades sao entidades normais do hibernate…


@Entity
public class Municipio {

	Long id;
	String nome;
	Estado estado;

	@Id
	@GeneratedValue(generator="sq_municipio", strategy=GenerationType.AUTO)
	@SequenceGenerator(name="sq_municipio", sequenceName="sq_municipio")
	public Long getId() {
		return id;
	}
	@DescriptionProperty
	public String getNome() {
		return nome;
	}
	@ManyToOne
	public Estado getEstado() {
		return estado;
	}
        //sets ocultados
}

@Entity
public class Estado {

	Long id;
	String nome;
	String sigla;
	Pais pais;
	
	@Id
	@GeneratedValue(generator="sq_estado", strategy=GenerationType.AUTO)
	@SequenceGenerator(name="sq_estado", sequenceName="sq_estado")
	public Long getId() {
		return id;
	}
	@DescriptionProperty
	public String getNome() {
		return nome;
	}
	@ManyToOne
	public Pais getPais() {
		return pais;
	}
	//sets ocultados
}

A única diferença… é a anotação @DescriptionProperty… que indica ao Next qual propriedade descreve melhor o bean… o Next usa essa informação em vários lugares que tiver que dar um “toString” no objeto…

Para fazer o reload de combos nao é necessário código Java

[quote=rogelgarcia]As entidades sao entidades normais do hibernate…


@Entity
public class Municipio {

	Long id;
	String nome;
	Estado estado;

	@Id
	@GeneratedValue(generator="sq_municipio", strategy=GenerationType.AUTO)
	@SequenceGenerator(name="sq_municipio", sequenceName="sq_municipio")
	public Long getId() {
		return id;
	}
	@DescriptionProperty
	public String getNome() {
		return nome;
	}
	@ManyToOne
	public Estado getEstado() {
		return estado;
	}
        //sets ocultados
}

@Entity
public class Estado {

	Long id;
	String nome;
	String sigla;
	Pais pais;
	
	@Id
	@GeneratedValue(generator="sq_estado", strategy=GenerationType.AUTO)
	@SequenceGenerator(name="sq_estado", sequenceName="sq_estado")
	public Long getId() {
		return id;
	}
	@DescriptionProperty
	public String getNome() {
		return nome;
	}
	@ManyToOne
	public Pais getPais() {
		return pais;
	}
	//sets ocultados
}

A única diferença… é a anotação @DescriptionProperty… que indica ao Next qual propriedade descreve melhor o bean… o Next usa essa informação em vários lugares que tiver que dar um “toString” no objeto…

Para fazer o reload de combos nao é necessário código Java[/quote]
lol
Obrigado Roger pela atenção!

muito bacana!
d+
:smiley: :smiley:

vamos fazer um campanha! Usem o NEXT!
rs

Mesmo sem usar o NEXT por não ter “Tempo” e esta em um projeto Mobile! pra mim o NEXT esta aprovado!
:thumbup:
vlw++
abs

Heheheh… valew!!!