lunes, 27 de diciembre de 2010

Un problema con Ajax

Estaba intentando generar un documento que al pulsar un enlace ajax enviara la información del formulario a una método java y crear un documento con esos datos y luego que se descargara, pues tuve el problema de que no salia la ventana de abrir o descarga el documento, sino lo embebía en la misma pagina de la aplicación.
Resulta que investigando un poco y preguntado a un compañero que ajax no se puede descargar documentos, así que en vez de hacerlo con un a4j:commandLink y si utilizaba un s:link pues no me enviaba la información del formulario , así que me aconsejaron que utilizara un h:commanLink, que sí envía la información del formulario y permite la descarga de documentos.

martes, 21 de diciembre de 2010

Reiniciar secuencia en Oracle

He estado haciendo una migración de datos de una base de datos a otra y necesitaba reiniciar las secuencias de la tablas donde se van a importar los datos a 1.
Para ello podemos hacer lo siguiente:
  • SELECT SEQ.CURRVAL FROM DUAL -->Miramos el valor actual de la secuencia con la instrucción .
  • ALTER SEQUENCE SEQ INCREMENT by -VAL--> con el valor obtenido con la anterios sentencia incrementamos a -valor para para reiniciar la secuencia a 1
  • SELECT SEQ.NEXTVAL FROM DUAL--> reiniciamos la secuencia.
  • ALTER SEQUENCE SEQ INCREMENT by 1--> establecemos el incremento de la secuencia.

lunes, 27 de septiembre de 2010

XSTL

Son unas plantillas para transformar XML en otra cosa. Por ejemplo para transformar XML en HTML.


Más información : http://www.w3.org/TR/xslt

Otras url :Xsl, Xstl. Xpath.. , Xsl

jueves, 23 de septiembre de 2010

Subconsultas relacionadas

Una subconsulta es una consulta SELECT que devuelve un valor único y está anidada en una instrucción SELECT, INSERT, UPDATE o DELETE, o dentro de otra subconsulta. Una subconsulta se puede utilizar en cualquier parte en la que se permita una expresión, delante o detras de un WHERE, pero las subconsultas relacionadas pueden usarse en la cláusula FROM.

Se puede acualiar una columna de una tabla con información de otro tabla uando subconsulta en vez de la sintaxis UNION.

Se pueden crear vista con subconsultas relacionadas y se pueden usar subconsultas relacionadas con las vistas del diccionario.

Puede utilizar tres formas de sintaxis para crear una subconsulta:

  • comparación [ANY | ALL | SOME] (instrucción sql) --> Es una expresión y un operador de comparación que compara la expresión con el resultado de la subconsulta.
  • expresión [NOT] IN (instrucción sql) [NOT] EXISTS -->Es una expresión por la que se busca el conjunto resultante de la subconsulta.
  • instrucción sql -->Es una instrucción SELECT, que sigue el mismo formato y reglas que cualquier otra instrucción SELECT. Debe ir entre paréntesis.
Los predicados que utliza son :
  • EXIST(con la palabra reservada NOT opcional) --> se utiliza en comparaciones de verdad/falso para determinar si la subconsulta devuelve algún registro.Este operador tb se puede usar en subconsultas de multiples columnas.
  • ANY o SOME --> los cuales son sinónimos, para recuperar registros de la consulta principal, que satisfagan la comparación con cualquier otro registro recuperado en la subconsulta.
  • ALL --> El predicado ALL se utiliza para recuperar únicamente aquellos registros de la consulta principal que satisfacen la comparación con todos los registros recuperados en la subconsulta.
  • IN or NOT IN--> para recuperar únicamente aquellos registros de la consulta principal para los que hay (o no hay) algunos registros de la subconsulta contienen un valor igual.

viernes, 23 de julio de 2010

Borrar tablas

Hace poco vi que al borrar una tabla con DROP no se borra del esquema de base de datos, sino que se renombra la tabla y se queda en la papelera con un nombre raro como por ejemplo "BIN$ZEcoVqu5ag/gQKjAFwoptQ==$0:"

Para poder borrarla definitivamente de la base de datos hay que ejecutar la sentencia :
PURGE TABLE "nombre de la tabla";

También se peude recuperar esa tabla con la sentencia:
FLASHBACK TABLE nombreTabla TO BEFORE DROP;

Hay más opciones sobre el purgado y versiones del drop, podemos hacer más de un drop de la tabla y querer recuperar uno en concreto o purgar uno en concreto o la papelera entera, etc... Para ello podéis encontrar más información en:

http://www.orafaq.com/node/968

miércoles, 14 de julio de 2010

Método hascode() y equals()

El método hashCode() te sirve para asignar un ID al objeto y así pode encontrarlo por ejemplo dentro de una colección, y el método equals se utiliza para saber si dos objetos son iguales.

martes, 6 de julio de 2010

Tipo CHAR

He estado teniendo problemas con una columna de tipo CHAR ,resulta que al sacar el dato en un textarea, el resto del textarea que no estaba relleno metía espacios en blanco y he encontrado esto por Internet,que la longitud de una columna CHAR se fija a la longitud que se declara al crear la tabla. La longitud puede ser cualquier valor de 0 a 255. Cuando los valores CHAR se almacenan, se añaden espacios a la derecha hasta las longitud específica. Cuando los valores CHAR se recuperan, estos espacios se borran.

El caso es que a mi no me borraba los espacios en blanco tal como dice así que he tenido que cambiar el tipo a varchar2 y se solucionó el problema pues un dato o variable VARCHAR tiene una longitud variable: VARCHAR(20) indica que se trata de una cadena de máximo 20 posiciones. El espacio que se empleará para almacenar esa cadena es solo el que ocupe (5, 10, etc. caracteres).

lunes, 28 de junio de 2010

Borrar una columna

ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;

viernes, 21 de mayo de 2010

Algunos conceptos de Ajax

  • ajaxSingle -->Cuando le pones ajaxSingle="true" a un elemento a4j, estás indicando que en la petición Ajax sólo se enviará ese campo al servidor. El resto de campos del formulario no se enviarán.
  • ajaxRegion -->Y un a4j:region delimita un grupo de campos que se enviarán en la petición Ajax. Digamos que determina qué trozo de la web estará involucrada en la petición Ajax.Todo lo que quede fuera de la región, no contará para el tema Ajax.
  • immediate -->Cuando pones immediate="true" en un elemento JSF (no es un atributo exclusivo de A4J) estás indicando que ese elemento no pasará por la validación de JSF.

miércoles, 28 de abril de 2010

Quitar contraseña del SVN

Hace poco he tenido que quitar la contraseña de mi SVN y para ello he tenido que hacer los siguientes pasos:
  1. Desconectar el SVN (Discard location).
  2. Eliminar el archivo .keyring, yo lo tengo en la carpeta de eclipse/configuration/org.eclipse.core.runtime.
  3. Reiniciar Eclipse para que se haga efectivo el cambio.

martes, 30 de marzo de 2010

Spring Security

Es un subproyecto de Spring con el cual podemos gestionar la autenticación en las aplicaciones Java tanto a urls del proyecto como a clases Java o acceso a métodos.La gestión de usuario se puede realizar a través de roles en bases de datos.

Este subproyecto utiliza filtros para la seguridad de métodos o clases o las peticiones al servidor de la aplicación y la conflagración de la seguridad se encuentra dentro del war ear y otras de las ventajas que tienes es que soporta varios modelos de autenticación como LDAP, HTTP Digest etc... y podemos ampliar extendiendo nuestras clases del Spring Security.

Estos filtros se confirguran en el web.xml.

Con Spring Security podemos incluis seguridad en nuestras aplicaciones facilmente ya que apenas tenemos que escribir código para poder utilizarlo.

El jar que necesitamos el : spring-security-core.jar

viernes, 5 de marzo de 2010

Alterian

Alterian en un software cuyo funcionamiento es un motor de base de datos muy optimizado y nos permite realizar muchas operación en muy poco tiempo(estamos hablando entre 50 y 5000 veces más rápidas).

Para que esto ocurra lo que hace el sistema de gestión de bases de datos es indexar todas las columnas y traspone las filas de las tablas por columnas, de modo que se optimice el acceso.

LDAP

Es un protocolo ligero de acceso a directorios y también es considerado como base de datos ala cual se puede realizar consultar y la forma de almacenar puede ser diferente a las bases de datos habituales.

Habitualmente se utiliza para almacenar usuarios y contraseñas y se suele utilizar para la autenticación.
También es posible almacenar mas información como datos de contacto del usuario, permisos etc...

viernes, 26 de febrero de 2010

La mejor manera de tratar errores.

Ha pasado que al capturar alguna error con try/catch se ha puesto en el catch log.equals(e) lo mejor seria:
try{

//acciones

}catch(Error e){
log.error( "Se ha producido una excepción realizar las acciones. Parametro1: "+parametro+". Error: "+e)
}

miércoles, 24 de febrero de 2010

String vs StringBuffer vs StringBuilder

Hay varias formas de concatenar String :
  • Con el operador + --> string + string + string
  • StringBuffer --> Los métodos de StringBuffer son sincronizados, por lo cual la podemos usar de manera segura en un ambiente de multihilos.
  • StringBuilder -->Los métodos de StringBuilder no son sincronizados, por lo que tiene mejor rendimiento que StringBuffer.
La mejor manera de concatenar String es con StringBuilder, ya que su rendimiento es mayor, el tiempo de concatenacion es menor y en un ambiente multihilo sigue siendo la mejor opción

martes, 9 de febrero de 2010

Para acceder a la visibilidad de las etiqueta

Para ello utilizamos :

$("#item").css("display")

he tenido que hacer en mi aplicacion cambiar a imagen si el display es block, para ello he hecho lo siguiente:

if(jQuery('#item').css('display')=="block"){
jQuery('#item').attr('src','img/delete.png');
}else{
jQuery('#item').attr('src','img/add.png');
}

Ejemplo más complejo de Jquery

En el apartado anterior puse un pequeño ejemplo, ahora vamos ampliarlo.

Teníamos una tabla y en una columna una imagen que al pulsar sobre ella aparecía un Texto.
Ahora vamos hacer que al pinchar sobre esa imagen aparezca una tabla de detalle de ese registro. Vamos hacerlo utilizando un servlet, código jquery y html.

En el ejemplo anterior teníamos:

En la etiqueta img tendremos la etiqueta id="filaSeleccionada"

Donde queremos que salga el texto pondremos por ejemplo dentro de la etiqueta div, le añadimos la etiqueta id='miFila' y dentro del div el texto que queremos que aparezca.

Quitamos el texto pero dejamos el div.

Ponemos un campo hidden con el id del registro para montar la tabla con los datos Detalle de ese registro.

El código JQuery será ahora:

$(document).ready(function(){

jQuery('.filaSeleccionada').click(function() {
var numero = jQuery(this).next().attr('value'); --> este valor sera el del input hidden, con esto cogemos el valor del siguiente atributo que viene despues de la imagen.

con esto llamamos al servlet que es lo que hay dentro de las comillas y luego entre {} ponemos las variables que le vamos a pasar al servlet, en ese caso el id de la fila seleccionada

jQuery.getJSON ("generaTablaDetalle",
{ numeroFila : numero },
con lo que nos devuelve el servlet hacemos la siguiente operacion

function(data){ -->data es lo que nos devuelve el servlet

jQuery('#fila'+numero).html(data.detalle); --> con esta sintaxis hacemos que aparezca donde tenemos la etiqueta id fila+numerofila la tabla que nos ha devuelto el servlet.

con toggle hacemos que si se ha pulsado sobre la imagen se despliegue con un efecto(esto lo hace slow) la tabla creada y si volvemos a pulsar desaparece en caso de estar la tabla desplegada.

jQuery('#fila'+numero).toggle("slow");
}
);
});
};

Y el servlet que tendremos será parecido al siguiente:

public class MostrarDetalleServlet extends HttpServlet implements Servlet {


private static final long serialVersionUID = 1825793524350619027L;
private static Log log = LogFactory.getLog(MostrarDetalleServlet.class);

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

PrintWriter writer = response.getWriter(); --> con esto devolvemos al jquery la tabla que nos vamos a crear

//para el encoding
String responseEncoding = "text/html;charset=";
String encoding = null;
if (StringUtils.isNotEmpty(System.getProperty("sun.jnu.encoding"))) {
encoding = System.getProperty("sun.jnu.encoding");
} else {
encoding = "ISO-8859-1";
}
responseEncoding += encoding;
response.setContentType(responseEncoding);


String numeroFila=(String)request.getParameter("numeroFila"); --> el parámetro que le hemos pasado en el jquery al hacer la llamada del servlet.

String tablaDetalle=null;
//buscamos en base de datos los datos con ese id y montamos la tabla con el resultado obtenido.
tablaDetalle=método para crear la tabla;

//Redirigimos
writer.println(" {detalle : \""+ tablaDetalle +"\"} ");
writer.flush();
writer.close();
}

}
}

lunes, 8 de febrero de 2010

JQuery

jQuery es una liviana libreria de JavaScript, pensada para interactuar con los elementos de una web por medio del DOM. Lo que la hace tan especial es su sencillez y su reducido tamaño.

Los comandos se reconocen por comenzar con el simbolo "$", y para acceder a los elementos de la página se usa la misma nomenclatura que en CSS:
  • Para las etiquetas: a , strong, div.
  • Para etiquetas con id: se pone # deltante del nombre de la etiqueta.
  • Para etiquetas con un class: se pon . deltante del nombre de la etiqueta
Vamos a ver un pequeño ejemplo:

Tegno una tabla con un listado, una de las columnas tiene una imagen y quiero que al pinchar en esa imagen me aparezca un texto.
Para ello hacemos lo siguiente:

En la etiqueta img tendremos la etiqueta id="filaSeleccionada"

Donde queremos que salga el texto pondremos por ejemplo dentro de la etiqueta div, le añadimos la etiqueta id='miFila' style="display: none" y dentro del div el texto que queremos que aparezca.

El código JQuery será:

$(document).ready(function(){
jQuery('#filaSeleccionada').click(function() {
jQuery('#miFila').show();
});
};


Es un pequeño ejemplo que iremos a medida que vaya conociendo mejor Jquery poniendolo más complicado.

lunes, 18 de enero de 2010

Coger variables del context

Para ello utilizamos la siguinente linea:

getRequest().getSession().getServletContext().getAttribute("nombre de la variable");