Mostrando postagens com marcador JSTL. Mostrar todas as postagens
Mostrando postagens com marcador JSTL. Mostrar todas as postagens

segunda-feira, 8 de setembro de 2014

Projeto Spring MVC para estudos

Pessoal vou por aqui zipado um projeto pronto para fins de estudo. O projeto possui as seguintes tecnologias:


  • Spring MVC , Core, ORM e AOP 3.1.2
  • JPA
  • Hibernate 4.1.7
  • JSP e JSTL 1.2
  • JasperReports 5.1.0
  • MySQL 5.1.18
  • Servlet 1.0.1
  • Tiles 2.2.2
  • Gson 2.2.4
  • Javax Mail 1.4.3
  • Tomcat v7.0.54

Leia Mais ››

terça-feira, 12 de novembro de 2013

Último elemento de lista JSTL

Se você está em um loop c:forEach e, quer exibir ou carregar alguma coisa quando o loop estiver no último elemento, você pode usar o método getLast() do contador (varStatus) do loop.

Contador de loop c:forEach ??

Sim, a tag c:forEach nos permite criar um contador, que é nada mais que uma variável de escopo de página. Essa variável é criada a partir da especificação do atributo varStatus da tag c:forEach. Abaixo, segue um exemplo.

Exemplo 1.
<c:forEach items="${suaLista}" var="elemento" varStatus="contador">
          ${elemento.id} - ${elemento.nome} - ${elemento.email}
</c:forEach>


Para quem não entendeu o exemplo acima, mostro abaixo o trecho de código correspondente em java.

Exemplo 2
for(int i=0; i<suaLista.size(); i++){
          Object o = suaLista.get(i);
          System.out.println(o.getId() + " - " + o.getNome() + " - " + o.getEmail());
}

Se você não entendeu o exemplo acima, fico triste em te dizer que seu problema é lógica de programação. Porém, se você entendeu, vamos a uma explicação mais profunda. Na tag c:forEach o controle do loop, a criação do objeto do laço e a incrementação são automáticos. Logo, você não tem que se preocupar com isso, você só tem que se preocupar com a lógica do seu negócio.

Mas, aonde entra o contador / varStatus ????

Calma, já vamos chegar lá. Usando o exemplo 1, vamos supor que, além dos dados da lista você também quer exibir a posição da lista aonde estão aqueles dados.

Exemplo 3.
<c:forEach items="${suaLista}" var="elemento" varStatus="contador">
          ${contador.count}: ${elemento.id} - ${elemento.nome} - ${elemento.email}
</c:forEach>

O resultado desse exemplo será:

0: 1 - João - jp@gmail.com
1: 2 - Maria - maria@gmail.com
2: 3 - José - ze@gmail.com

Que count é esse ???

Esse count é um método da interface LoopTagStatus, que é acessado via reflection, logo você não precisa usar getCount() e, sim count. Esse método retorna o valor atual do contador. Dessa forma, podemos atingir o resultado acima.

Hummm, entendi o count. Mas, como uso o last ?

Você pode usar o método last da forma que quiser. Ele funciona via reflection, como o count. Segundo a documentação, ele funciona da seguinte forma:

Returns information about whether the current round of the iteration is the last one. As with isFirst(), subsetting is taken into account. isLast() doesn't necessarily refer to the status of the underlying Iterator; it refers to whether or not the current round will be the final round of iteration for the tag associated with this LoopTagStatus.

Ele retorna um booleano informando se aquela iteração é última ou não. Se for a última é porque corresponde ao último elemento do loop, senão, é porque não corresponde.

Agora que já sabemos como o last funciona, podemos ver um exemplo dele. Vamos supor que listagem de objetos do exemplo 3, no último objeto queremos uma label com a seguinte descrição "Sou o último". Segue exemplo.

Exemplo 4.
<c:forEach items="${suaLista}" var="elemento" varStatus="contador">
          ${contador.count}: ${elemento.id} - ${elemento.nome} - ${elemento.email}
          <c:if test="contador.last">
                 Sou o último.
          </c:if>
</c:forEach>

O resultado será.

0: 1 - João - jp@gmail.com
1: 2 - Maria - maria@gmail.com
2: 3 - José - ze@gmail.com Sou o último.

Galera, espero que tenham gostado de mais esse post. Se escrevi algo errado, comentem, para que eu possa consertar.

Referências:
http://stackoverflow.com/questions/3099234/jstl-foreach-omit-an-element-in-last-record
http://docs.oracle.com/javaee/5/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html#isLast%28%29



Leia Mais ››

quarta-feira, 26 de dezembro de 2012

Acessando posições de lista JSTL

Vamos supor que você queira acessar uma posição específica da sua lista com JSTL, em casa posição da lista existe um objeto da classe Pessoa, que possui os seguintes atributos:

class Pessoa{
 private String id;
 private String nome;
 private String email;

 /*getters e setters*/
}

Vamos supor também que na sua jsp você queira acessar especificamente a primeira posição da lista, somente a primeira posição e você não quer utilizar um <c:forEach>. Como fazer isso sem iterar a lista ? Devo por no request o objeto na primeira posição da lista ? E se quiser um outro objeto da lista ? Devo settar no request também ?

A solução para isso é mais simples do que parece, vamos supor que você setou a lista request com o nome de lista. Na JSP, você deverá acessar a primeira posição desta forma:

${lista[0]}

Desta forma você terá acesso ao objeto da classe Pessoa, que está na primeira posição mas, se você quiser acessar o nome, ou o email ou o id ?

Para acessar o nome: ${lista[0]}.nome
Para acessar o email: ${lista[0]}.email
Para acessar o id: ${lista[0]}.id
Leia Mais ››