hacer un sitio con Opencms y postgres
Hacer un sitio con OpenCms y postgres
Debido a unas consideraciones de diseño decidí utilizar Opencms con MySql como contenedor y postgres como base de datos de la aplicación.
Nota : este ejercicio fue probado en Mandriva 2010 y Ubuntu 11.04
Para tal efecto programé postgres para usarla on TCP/IP.
Cree una carpeta de nombre BACKOFFICE en:
/system/modules/co.com.miSitio/elements/
En esta carpeta coloque el archivo que establece la conexion desde OpenCms con postgres, en:
/system/modules/co.com.miSitio/elements/BACKOFFICE/Conexion.jsp
el archivo es :
Conexion.jsp
Puede cortar y pegar libremente el contenido entre lineas
Nota : Recordar que en OpenCms NO se le coloca la extension .jsp él la coloca
por defecto, si lo hace luego no encuentra el archivo pues intermente lo graba
como Conexion.jsp.jsp
----------------------------------------------------------------------------------------------------------
<%-- *** Conexion ***
Carlos Arturo Castano
18/03/2011
Establece una Conexion y Desconexion con una Base de Datos
Recuerde que JAVA no trabaja con Socket en su lugar usa
tcp/ip por lo tanto la base de datos que se va usar debe
estar preparada para esto.
Este archivo permite conectar por socket tanto mySql como postgres
En ambos casos hay que preparar las bases de datos para que trabaje
por socket, mas abajo hay una breve explicación de los pasos a tener
en cuenta en cada caso.
La seleción de la base de datos que se va usar está en la variable :
BASEdeDatos la cual conjuntamente con otras variable que necesitamos
definir la colocamos en un archivo de nombre Entorno.jsp que definiremos
lmas tarde.
en escencia los pasos siguiente son los mismos para las dos bases de datos
eventualmente dependiendo de la version hay cambios en el uso de las variables y su
conformacion por ejemplo en algunas versiones de postgres usan:
tcp_ip = 1 ó tcpIP= true o cualquier otra presentación pero el efecto es el mismo
busque en su distribución la conformacion correcta, tambien puede usar la opción -I en el inicio
del servidor de bases de datos
Postgres :
Parametros para Inicio de la Base de Datos
No olvidar cambiar en /var/lib/pgsql/data/postgresql.conf
tcp_ip=1
para que postgres pueda abrir comunicacion con tcp_ip
en el /var/lib/pgsql/data/pg_hba.conf asignar el acceso
al servidor
NOTA:
A partir de la version 8,3 de postgres el parametro tcp_ip en /var/lib/pgsql/data/postgresql.conf no
aparece en y en su lugar esta comentada la suiguiente linea.
#listen_adresses = 'localhost'
debe ser descomentada y cambiar local host por * que significa que es para todas las direcciones asi:
listen_adressess = '*'
y en /var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE AUTH_ARGUMENT
local all 127.0.0.1/32 ident
cambiar a
host all all 127.0.0.1/32 trust
es decir cambiamos el METHOD de ident a trust
mySql:
crear un usuario que tenga todos los privilegios.
asi para poder sorterar el problema del socket:
GRANT ALL PRIVILEGES ON *.* to '[USER]'@'[HOSTNAME]'
IDENTIFIED BY '[PASSWD]'
# mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* to 'miusuario'@'localhost'
IDENTIFIED BY 'oficyna' ;
mysql> FLUSH PRIVILEGES ;
observe que el usuario es miusuario y que el equipo desde el
cual se obtienen los datos es localhost, totalmente
cualificado, observe tambien las comillas antes y despues de
@ y el passwd es miusuario=IDENTIFIED
# mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* to 'miusuario'@'localhost'
IDENTIFIED BY 'miusuario' ;
mysql> FLUSH PRIVILEGES ;
observe que el usuario es miusuario y que el equipo desde el cual se
obtienen los datos es localhost, totalmente
cualificado, observe tambien las comillas antes y despues de @
a partir de la version 5.0 de mysql,tiene
MYSQLD_OPTIONS="--skip-networking"
la cual puede aparecer en el /etc/rc.d/init.d/mysqld o en
/etc/sysconfig/mysqld, o en /etc/my.cnf ests instruccion impide que se pueda
hacer una conexion TCP/IP, por lo tanto hay que comentarla para poder establecer las conexiones
--%>
<%!
public final synchronized void Conexion()
{
StringBuffer SqlSbC = new StringBuffer() ;
try
{
if (BASEdeDATOS.equals("postgres"))
{
SqlSbC = new StringBuffer() ;
SqlSbC.append("jdbc:postgresql:") ;
SqlSbC.append(usuarioDB) ;
String dataBase = SqlSbC.toString() ;
Class.forName("org.postgresql.Driver") ;
if (conexion == null)
{
conexion = DriverManager.getConnection(
dataBase,"postgres","oficyna") ;
Close() ;
st = conexion.createStatement() ;
}
else
{
conexion = DriverManager.getConnection(
dataBase,"postgres","oficyna") ;
st = conexion.createStatement() ;
}
}
if (BASEdeDATOS.equals("mySQL"))
{
SqlSbC = new StringBuffer() ;
SqlSbC.append("jdbc:mysql:///") ;
SqlSbC.append(usuarioDB) ;
String dataBase = SqlSbC.toString() ;
// Existen los 2 Driver ambos trabajab bien
// Class.forName("org.gjt.mm.mysql.Driver") ;
Class.forName("com.mysql.jdbc.Driver") ;
if (conexion == null)
{
conexion =DriverManager.getConnection
(dataBase,"oficyna","oficyna") ;
Close() ;
st = conexion.createStatement() ;
}
else
{
conexion =DriverManager.getConnection
(dataBase,"oficyna","oficyna") ;
st = conexion.createStatement() ;
}
}
}
catch(Exception e)
{
bufferError.append("<table><tr><td bgcolor=yellow>") ;
bufferError.append("<font color=red>") ;
bufferError.append("Error al crear Conexion: " + SqlSbC + e) ;
bufferError.append("</font></td></tr></table>") ;
}
}
public final synchronized void Close()
{
try
{
if (rt != null)
{
rt.close() ;
}
if (st != null)
{
st.close() ;
}
if (pst != null)
{
pst.close() ;
}
}
catch(Exception e)
{
bufferError.append("<table><tr><td bgcolor=yellow>") ;
bufferError.append("<font color=red>") ;
bufferError.append("Error al cerrar Conexion: " + e) ;
bufferError.append("</font></td></tr></table>") ;
}
}
%>
------------------------------------------------------------------------------------
Entorno.jsp
Puede cortar y pegar libremente el cotenido entre lineas
Nota : Recordar que en OpenCms NO se le coloca la extension .jsp él la coloca
por defecto, si lo hace luego no encuentra el archivo pues intermente lo graba
como Entorno.jsp.jsp
-------------------------------------------------------------------------------------
<%!
// Carlos Arturo Castano
// 19/03/2011
// Defina la Base datos
// Descomentando la que va usar y comente las demas
// -----------------------------------------------------------------------
// static final String BASEdeDATOS = "mySQL" ;
static final String BASEdeDATOS = "postgres" ;
// -----------------------------------------------------------------------
private StringBuffer bufferError = new StringBuffer() ;
private String camposDB = new String() ;
private Connection conexion = null ;
private String groupByDB = new String() ;
private String orderByDB = new String() ;
private PreparedStatement pst ;
private ResultSet rt ;
private Statement st ;
private String sqlDB = new String() ;
private String tablaDB = new String() ;
private String usuarioDB = "backoffice" ;
private String valoresDB = new String() ;
private String whereDB = new String() ;
%>
-----------------------------------------------------------------------------------
Ahora haces uso de estos dos archivos en un archivo de aplicacion que
simplemente mediante un select pone a disposicíon de un usuario las ciudades
capitales de Colombia
Antes, desde luego debemos crear la tabla que contenga dicha información.
en el ejemplo que estamos desarrollando llame la base como backoffice y la
ciudades
Recuerde ejecutar este scrip como Super Usuario POSTGRES
Normalmente este es postgres
de permsisos a esta carpeta para que la creacion pueda grabar los
log de reporte de creacion de las bases de datos backpffice.
asi :
su postgres
./crearbases.sh
exit
archivo:
crearbases.sh
Puede cortar y pegar libremente el contenido entre lineas
---------------------------------------------------------------------------------------
psql -d template1 -c 'drop database backoffice'
psql -d template1 -c 'create database backoffice'
psql backoffice -f tablas.sql 2>tablas.log
psql backoffice -f datos.sql 2>datos.log
---------------------------------------------------------------------------------------
el archivo tablas.sql crea propiamente la tabla ciudades y el archivo
datos poblará la tabla con el nombre de las ciudades.
archivo:
tablas.sql
Puede cortar y pegar libremente el cotenido entre lineas
----------------------------------------------------------------------------------------
CREATE TABLE CIUDADES (
Registro VARCHAR(20) DEFAULT ' ' ,
Ciudad VARCHAR(50) DEFAULT ' '
);
----------------------------------------------------------------------------------------
datos.sql
Puede cortar y pegar libremente el cotenido entre lineas
----------------------------------------------------------------------------------------
INSERT INTO CIUDADES (Ciudad) VALUES ('Arauca') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Armenia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Barranquilla') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Bogota') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Bucaramanga') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cali') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cartagena') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cucuta') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Florencia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Ibague') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Leticia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Manizales') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Medellin') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Mitu') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Mocoa') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Monteria') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Neiva') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Pasto') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Pereira') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Popayan') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Puerto Carreno') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Puerto Inirida') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Quipdo') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Riohacha') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('San Andres') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('San Jose del Guaviare') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Santa Marta') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Sincelejo') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Tunja') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Valledupar') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Villavicencio') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Yopal') ;
------------------------------------------------------------------------------------
Si todo nos salió bien debemos tener 2 archivos Conexion.jsp y Entorno.jsp
en la carpeta ../elements/BACKOFFICE y la tabla ciudades creada en
base de datos backoffice.
ahora veamos el pequeno programa de aplicacion que permite seleccionar
la ciudad
archivo:
grabar el siguiente demo en ../templates
entrarCiudades.jsp
Puede cortar y pegar libremente el cotenido entre lineas
-----------------------------------------------------------------------------------
<%@page buffer="none" session="false" import="java.util.*" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ page language="java"
session="false"
import ="java.io.*"
import ="java.sql.*"
import ="java.net.*"
import ="java.util.*"
%>
<%@ include file="../elements/BACKOFFICE/Entorno.jsp" %>
<%@ include file="../elements/BACKOFFICE/Conexion.jsp" %>
<%
Conexion() ;
%>
<html>
<head>
<script>
function irCiudad()
{
var indice = document.listaDeCiudades.ciudades.selectedIndex
var valor = "../CIUDADES/" + document.listaDeCiudades.ciudades.options[indice].value.toLowerCase()
if (indice != 0)
{
document.location = valor;
}
endif
}
</script>
</head>
<style type="text/css">
.entrarCiudades
{
position: absolute;
top : 490px ;
left : 666px
}
</style>
<form name ="listaDeCiudades"
method ="post"
enctype ="text/plain"
>
<div class="entrarCiudades">
<select style="width: 120px;"
name="ciudades"
size="1"
onchange="irCiudad()"
>
<%
StringBuffer sqlSbE = new StringBuffer() ;
String ciudadS= new String() ;
String titulo = new String() ;
String valor = new String() ;
try
{
sqlSbE.append(" SELECT ") ;
sqlSbE.append("Ciudad") ;
sqlSbE.append(" FROM ") ;
sqlSbE.append(" CIUDADES ") ;
sqlSbE.append(" ORDER BY ") ;
sqlSbE.append("Ciudad") ;
rt = st.executeQuery(sqlSbE.toString()) ;
while (rt.next())
{
ciudadS = rt.getString(1) ;
titulo = ciudadS.trim() ;
valor = ciudadS ;
if (titulo.equals("Medellin"))
{
%>
<option selected value='<%=valor%>'> <%=titulo%>
<%
}
else
{
%>
<option value='<%=valor%>'> <%=titulo%>
<%
}
}
}
catch(Exception e)
{
out.println("error Leyendo Ciudad: " + e) ;
}
%>
</select>
</div>
</form>
</html>
----------------------------------------------------------------------------------------
Recordar que en el archivo entrarCiudades.jsp las intrucciones
siguientes son relativas , al punto donde esta el archivo y el
lugar donde pusimos los archivos Entorno.jsp y Conexion.jsp
<%@ include file="../elements/BACKOFFICE/Entorno.jsp" %>
<%@ include file="../elements/BACKOFFICE/Conexion.jsp" %>
por lo tanto si se desea mover el archivo a un sitio diferente tenga en cuenta este
hecho y ajuste la direccion.
Imagen generada por select con Posgres en OpenCms
Debido a unas consideraciones de diseño decidí utilizar Opencms con MySql como contenedor y postgres como base de datos de la aplicación.
Nota : este ejercicio fue probado en Mandriva 2010 y Ubuntu 11.04
Para tal efecto programé postgres para usarla on TCP/IP.
Cree una carpeta de nombre BACKOFFICE en:
/system/modules/co.com.miSitio/elements/
En esta carpeta coloque el archivo que establece la conexion desde OpenCms con postgres, en:
/system/modules/co.com.miSitio/elements/BACKOFFICE/Conexion.jsp
el archivo es :
Conexion.jsp
Puede cortar y pegar libremente el contenido entre lineas
Nota : Recordar que en OpenCms NO se le coloca la extension .jsp él la coloca
por defecto, si lo hace luego no encuentra el archivo pues intermente lo graba
como Conexion.jsp.jsp
----------------------------------------------------------------------------------------------------------
<%-- *** Conexion ***
Carlos Arturo Castano
18/03/2011
Establece una Conexion y Desconexion con una Base de Datos
Recuerde que JAVA no trabaja con Socket en su lugar usa
tcp/ip por lo tanto la base de datos que se va usar debe
estar preparada para esto.
Este archivo permite conectar por socket tanto mySql como postgres
En ambos casos hay que preparar las bases de datos para que trabaje
por socket, mas abajo hay una breve explicación de los pasos a tener
en cuenta en cada caso.
La seleción de la base de datos que se va usar está en la variable :
BASEdeDatos la cual conjuntamente con otras variable que necesitamos
definir la colocamos en un archivo de nombre Entorno.jsp que definiremos
lmas tarde.
en escencia los pasos siguiente son los mismos para las dos bases de datos
eventualmente dependiendo de la version hay cambios en el uso de las variables y su
conformacion por ejemplo en algunas versiones de postgres usan:
tcp_ip = 1 ó tcpIP= true o cualquier otra presentación pero el efecto es el mismo
busque en su distribución la conformacion correcta, tambien puede usar la opción -I en el inicio
del servidor de bases de datos
Postgres :
Parametros para Inicio de la Base de Datos
No olvidar cambiar en /var/lib/pgsql/data/postgresql.conf
tcp_ip=1
para que postgres pueda abrir comunicacion con tcp_ip
en el /var/lib/pgsql/data/pg_hba.conf asignar el acceso
al servidor
NOTA:
A partir de la version 8,3 de postgres el parametro tcp_ip en /var/lib/pgsql/data/postgresql.conf no
aparece en y en su lugar esta comentada la suiguiente linea.
#listen_adresses = 'localhost'
debe ser descomentada y cambiar local host por * que significa que es para todas las direcciones asi:
listen_adressess = '*'
y en /var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE AUTH_ARGUMENT
local all 127.0.0.1/32 ident
cambiar a
host all all 127.0.0.1/32 trust
es decir cambiamos el METHOD de ident a trust
mySql:
crear un usuario que tenga todos los privilegios.
asi para poder sorterar el problema del socket:
GRANT ALL PRIVILEGES ON *.* to '[USER]'@'[HOSTNAME]'
IDENTIFIED BY '[PASSWD]'
# mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* to 'miusuario'@'localhost'
IDENTIFIED BY 'oficyna' ;
mysql> FLUSH PRIVILEGES ;
observe que el usuario es miusuario y que el equipo desde el
cual se obtienen los datos es localhost, totalmente
cualificado, observe tambien las comillas antes y despues de
@ y el passwd es miusuario=IDENTIFIED
# mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* to 'miusuario'@'localhost'
IDENTIFIED BY 'miusuario' ;
mysql> FLUSH PRIVILEGES ;
observe que el usuario es miusuario y que el equipo desde el cual se
obtienen los datos es localhost, totalmente
cualificado, observe tambien las comillas antes y despues de @
a partir de la version 5.0 de mysql,tiene
MYSQLD_OPTIONS="--skip-networking"
la cual puede aparecer en el /etc/rc.d/init.d/mysqld o en
/etc/sysconfig/mysqld, o en /etc/my.cnf ests instruccion impide que se pueda
hacer una conexion TCP/IP, por lo tanto hay que comentarla para poder establecer las conexiones
--%>
<%!
public final synchronized void Conexion()
{
StringBuffer SqlSbC = new StringBuffer() ;
try
{
if (BASEdeDATOS.equals("postgres"))
{
SqlSbC = new StringBuffer() ;
SqlSbC.append("jdbc:postgresql:") ;
SqlSbC.append(usuarioDB) ;
String dataBase = SqlSbC.toString() ;
Class.forName("org.postgresql.Driver") ;
if (conexion == null)
{
conexion = DriverManager.getConnection(
dataBase,"postgres","oficyna") ;
Close() ;
st = conexion.createStatement() ;
}
else
{
conexion = DriverManager.getConnection(
dataBase,"postgres","oficyna") ;
st = conexion.createStatement() ;
}
}
if (BASEdeDATOS.equals("mySQL"))
{
SqlSbC = new StringBuffer() ;
SqlSbC.append("jdbc:mysql:///") ;
SqlSbC.append(usuarioDB) ;
String dataBase = SqlSbC.toString() ;
// Existen los 2 Driver ambos trabajab bien
// Class.forName("org.gjt.mm.mysql.Driver") ;
Class.forName("com.mysql.jdbc.Driver") ;
if (conexion == null)
{
conexion =DriverManager.getConnection
(dataBase,"oficyna","oficyna") ;
Close() ;
st = conexion.createStatement() ;
}
else
{
conexion =DriverManager.getConnection
(dataBase,"oficyna","oficyna") ;
st = conexion.createStatement() ;
}
}
}
catch(Exception e)
{
bufferError.append("<table><tr><td bgcolor=yellow>") ;
bufferError.append("<font color=red>") ;
bufferError.append("Error al crear Conexion: " + SqlSbC + e) ;
bufferError.append("</font></td></tr></table>") ;
}
}
public final synchronized void Close()
{
try
{
if (rt != null)
{
rt.close() ;
}
if (st != null)
{
st.close() ;
}
if (pst != null)
{
pst.close() ;
}
}
catch(Exception e)
{
bufferError.append("<table><tr><td bgcolor=yellow>") ;
bufferError.append("<font color=red>") ;
bufferError.append("Error al cerrar Conexion: " + e) ;
bufferError.append("</font></td></tr></table>") ;
}
}
%>
------------------------------------------------------------------------------------
En la misma carpeta creamos
/system/modules/co.com.miSitio/elements/BACKOFFICE/Entorno.jspEntorno.jsp
Puede cortar y pegar libremente el cotenido entre lineas
Nota : Recordar que en OpenCms NO se le coloca la extension .jsp él la coloca
por defecto, si lo hace luego no encuentra el archivo pues intermente lo graba
como Entorno.jsp.jsp
-------------------------------------------------------------------------------------
<%!
// Carlos Arturo Castano
// 19/03/2011
// Defina la Base datos
// Descomentando la que va usar y comente las demas
// -----------------------------------------------------------------------
// static final String BASEdeDATOS = "mySQL" ;
static final String BASEdeDATOS = "postgres" ;
// -----------------------------------------------------------------------
private StringBuffer bufferError = new StringBuffer() ;
private String camposDB = new String() ;
private Connection conexion = null ;
private String groupByDB = new String() ;
private String orderByDB = new String() ;
private PreparedStatement pst ;
private ResultSet rt ;
private Statement st ;
private String sqlDB = new String() ;
private String tablaDB = new String() ;
private String usuarioDB = "backoffice" ;
private String valoresDB = new String() ;
private String whereDB = new String() ;
%>
-----------------------------------------------------------------------------------
Ahora haces uso de estos dos archivos en un archivo de aplicacion que
simplemente mediante un select pone a disposicíon de un usuario las ciudades
capitales de Colombia
Antes, desde luego debemos crear la tabla que contenga dicha información.
en el ejemplo que estamos desarrollando llame la base como backoffice y la
ciudades
Recuerde ejecutar este scrip como Super Usuario POSTGRES
Normalmente este es postgres
de permsisos a esta carpeta para que la creacion pueda grabar los
log de reporte de creacion de las bases de datos backpffice.
asi :
su postgres
./crearbases.sh
exit
archivo:
crearbases.sh
Puede cortar y pegar libremente el contenido entre lineas
---------------------------------------------------------------------------------------
psql -d template1 -c 'drop database backoffice'
psql -d template1 -c 'create database backoffice'
psql backoffice -f tablas.sql 2>tablas.log
psql backoffice -f datos.sql 2>datos.log
---------------------------------------------------------------------------------------
el archivo tablas.sql crea propiamente la tabla ciudades y el archivo
datos poblará la tabla con el nombre de las ciudades.
archivo:
tablas.sql
Puede cortar y pegar libremente el cotenido entre lineas
----------------------------------------------------------------------------------------
CREATE TABLE CIUDADES (
Registro VARCHAR(20) DEFAULT ' ' ,
Ciudad VARCHAR(50) DEFAULT ' '
);
----------------------------------------------------------------------------------------
datos.sql
Puede cortar y pegar libremente el cotenido entre lineas
----------------------------------------------------------------------------------------
INSERT INTO CIUDADES (Ciudad) VALUES ('Arauca') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Armenia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Barranquilla') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Bogota') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Bucaramanga') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cali') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cartagena') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Cucuta') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Florencia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Ibague') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Leticia') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Manizales') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Medellin') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Mitu') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Mocoa') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Monteria') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Neiva') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Pasto') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Pereira') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Popayan') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Puerto Carreno') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Puerto Inirida') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Quipdo') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Riohacha') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('San Andres') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('San Jose del Guaviare') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Santa Marta') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Sincelejo') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Tunja') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Valledupar') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Villavicencio') ;
INSERT INTO CIUDADES (Ciudad) VALUES ('Yopal') ;
------------------------------------------------------------------------------------
Si todo nos salió bien debemos tener 2 archivos Conexion.jsp y Entorno.jsp
en la carpeta ../elements/BACKOFFICE y la tabla ciudades creada en
base de datos backoffice.
ahora veamos el pequeno programa de aplicacion que permite seleccionar
la ciudad
archivo:
grabar el siguiente demo en ../templates
entrarCiudades.jsp
Puede cortar y pegar libremente el cotenido entre lineas
-----------------------------------------------------------------------------------
<%@page buffer="none" session="false" import="java.util.*" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ page language="java"
session="false"
import ="java.io.*"
import ="java.sql.*"
import ="java.net.*"
import ="java.util.*"
%>
<%@ include file="../elements/BACKOFFICE/Entorno.jsp" %>
<%@ include file="../elements/BACKOFFICE/Conexion.jsp" %>
<%
Conexion() ;
%>
<html>
<head>
<script>
function irCiudad()
{
var indice = document.listaDeCiudades.ciudades.selectedIndex
var valor = "../CIUDADES/" + document.listaDeCiudades.ciudades.options[indice].value.toLowerCase()
if (indice != 0)
{
document.location = valor;
}
endif
}
</script>
</head>
<style type="text/css">
.entrarCiudades
{
position: absolute;
top : 490px ;
left : 666px
}
</style>
<form name ="listaDeCiudades"
method ="post"
enctype ="text/plain"
>
<div class="entrarCiudades">
<select style="width: 120px;"
name="ciudades"
size="1"
onchange="irCiudad()"
>
<%
StringBuffer sqlSbE = new StringBuffer() ;
String ciudadS= new String() ;
String titulo = new String() ;
String valor = new String() ;
try
{
sqlSbE.append(" SELECT ") ;
sqlSbE.append("Ciudad") ;
sqlSbE.append(" FROM ") ;
sqlSbE.append(" CIUDADES ") ;
sqlSbE.append(" ORDER BY ") ;
sqlSbE.append("Ciudad") ;
rt = st.executeQuery(sqlSbE.toString()) ;
while (rt.next())
{
ciudadS = rt.getString(1) ;
titulo = ciudadS.trim() ;
valor = ciudadS ;
if (titulo.equals("Medellin"))
{
%>
<option selected value='<%=valor%>'> <%=titulo%>
<%
}
else
{
%>
<option value='<%=valor%>'> <%=titulo%>
<%
}
}
}
catch(Exception e)
{
out.println("error Leyendo Ciudad: " + e) ;
}
%>
</select>
</div>
</form>
</html>
----------------------------------------------------------------------------------------
Recordar que en el archivo entrarCiudades.jsp las intrucciones
siguientes son relativas , al punto donde esta el archivo y el
lugar donde pusimos los archivos Entorno.jsp y Conexion.jsp
<%@ include file="../elements/BACKOFFICE/Entorno.jsp" %>
<%@ include file="../elements/BACKOFFICE/Conexion.jsp" %>
por lo tanto si se desea mover el archivo a un sitio diferente tenga en cuenta este
hecho y ajuste la direccion.
Imagen generada por select con Posgres en OpenCms
Comentarios
Publicar un comentario