Construção dinâmica de menus de seleção utilizando JSP
Este artigo propõe uma forma ordenada de gerar estes menus utilizando para isso JSP.Por Fernando Arturi
Publicado em: 04/10/06
Acontece quando temos que gerar menus de seleção dentro de páginas HTML. Muitas vezes estes menus são idênticos ou muito parecidos, e pode ocorrer de ocuparem muito lugar dentro de nossa página web.
A idéia é passar a esta função os parâmetros que nos interessam, e deixar que ela se ocupe do resto. Vejamos o código da página, com uma breve explicação abaixo de cada bloco de código.
<%@ page language="java"%>
<%!
private void writeMenu(javax.servlet.jsp.JspWriter out, int startValue,
int endValue, int selectedValue){
try{
// esta linha eh opcional...
out.println("<option value=\"-1\" selected>
Selecione uma opcao</option>");
// comeco o ciclo com a classe de valores dado.
for (int i=startValue; i<(endValue+1); i++){
// se o valor atual corresponde ao valor do ciclo,
//faco aparecer como selecionado
if (i == selectedValue){
out.println("<option value=\""+i+"\"
selected>"+i+"</option>");
}
else{
out.println("<option value=\""+i+"\">"+i+"</option>");
}
}
}catch(java.io.IOException e1){
System.out.println(e1);
}
}
%>
Esta é a função que gera o menu, recebe como parâmetros o valor inicial, o valor final, o valor atual e o objeto JspWriter, que permite escrever dinamicamente sobre a página.
<%
java.util.GregorianCalendar cal = new java.util.GregorianCalendar();
int day = cal.get(cal.DAY_OF_MONTH);
int month = (cal.get(cal.MONTH)) + 1;
int year = cal.get(cal.YEAR);
%>
Criamos variáveis de página, que nos servirão somente para provar a função.
<html>
<head>
<title>Construção dinâmica de menus de seleção</title>
</head>
<body>
<table>
<h1>construcao dinamica de menus de selecao</h1>
<tr>
<td>Dia:
<select>
<% writeMenu(out,1,31,day); %>
</select>
</td>
<td>Mes:
<select>
<% writeMenu(out,1,12,month); %>
</select>
</td>
<td>Ano:
<select>
<% writeMenu(out,2000,2010,year); %>
</select>
</td>
</tr>
</table>
</body>
</html>
Finalmente o html, muito simples, que mostra como se usa a funcao.
Uma variante deste procedimento seria, por exemplo, ler dados de uma database. Por exemplo, se quisermos gerar um clássico menu com a lista de países do mundo, poderemos fazer uma função deste tipo:
public void writeCountryMenu(Connection connection,
javax.servlet.jsp.JspWriter out, int currentValue){
try{
String sqlString = " SELECT id,Name from T_Countries order by orderview ";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sqlString);
while (rs.next()){
String selected = "";
int countryId = rs.getInt("id");
if (countryId==currentValue)
selected = "SELECTED";
out.print("<option value=\""+countryId+"\" "+selected+">"+rs.getString("Name")+"</option>");
}
rs.close();
stmt.close();
}catch(Exception e){
System.out.println(e);
}
}
Neste caso obviamente temos que passar uma conexão a um database (pode ser MsSQL, MySql, etc.) no qual temos a tabela T_countries, com os campos id, name e orderview.
Comentários do artigo