Construcción dinámica usando JSP

Sucede seguido que tenemos que generar menús de selección dentro de páginas HTML. Muchas veces estos menús son idénticos o muy similares, y puede pasar que ocupan mucho lugar dentro de nuestra pagina web.

La idea es pasar a esta función los parámetros que nos interesan, y dejar que ella se ocupe del resto. Veamos el código de la página, con una breve explicación debajo de cada bloque de código.

<%@ page language="java"%>
<%!
   private void writeMenu(javax.servlet.jsp.JspWriter out, int startValue,
  int endValue, int selectedValue){
  try{
  // esta línea es opcional...
   out.println("<option value=\"-1\" selected>
  Selecciona una opcion</option>");

  // comienzo el ciclo con el rango de valores dado.
  for (int i=startValue; i<(endValue+1); i++){
  // si el valor actual corresponde al valor del ciclo,
  //lo hago aparecer como seleccionado
   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 es la función que genera el menùs, recibe como parámetros el valor inicial, el valor final, el valor actual y el objeto JspWriter, que permite escribir dinámicamente sobre la 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);

%>

Creamos variables de página, que nos servirán solamente para probar la función.

<html>
<head>
<title>Construcción dinámica de menús de selección</title>
</head>

<body>

<table>
   <h1>construcción dinámica de menús de selección</h1>
    <tr>
     <td>Dia:
     <select>
      <% writeMenu(out,1,31,day); %>
     </select>
     </td>

     <td>Mes:
     <select>
      <% writeMenu(out,1,12,month); %>
     </select>

     </td>

     <td>Año:
     <select>
      <% writeMenu(out,2000,2010,year); %>
     </select>

     </td>

     </tr>
   </table>
  </body>
</html>

Finalmente el html, muy simple, que muestra cómo se usa la función. Una variante de este procedimiento sería por ejemplo leer datos de un database. Por ejemplo, si se quiere generar un clásico menú con la lista de países del mundo, se podría hacer una función de este 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);
   }
  }

En este caso obviamente tenemos que pasar una conexión a un database (puede ser MsSQL, MySql, etc.) en el cual tenemos la tabla T_countries, con los campos id, name y orderview.

Subir