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)
}
viernes, 26 de febrero de 2010
miércoles, 24 de febrero de 2010
String vs StringBuffer vs StringBuilder
STRINGBUFFER Y STRINGBUILDER
CLASE STRINGBUILDER
- Debe crearse con alguno de sus costructores asociados. No se permite instanciar directamente a una cadena como sí permiten los String.
- Un StringBuilder está indexado. Cada uno de sus caracteres tiene un índice: 0 para el primero,1 para el segundo, etc.
- Los métodos de StringBuilder no están sincronizados. Esto implica que es más eficiente que StringBuffer siempre que no se requiera trabajar con múltiples hilos (threads), que es lo más habitual.
Los constructores de StringBuilder se resumen en la siguiente tabla:
Los métodos principales de StringBuilder se resumen en la siguiente tabla:
El método append será probablemente el más utilizado cuando trabajemos con esta clase.
CLASE STRINGBUFFER
DIFERENCIAS ENTRE STRING, STRINGBUILDER Y STRINGBUFFER
Vamos a enumerar las principales diferencias entre estas tres clases:
- El operador de concatenación “+” es implementado internamente por Java usando StringBuilder.
Texto obtenido de StringBuffer, StringBuilder Java. Ejemplo. Diferencias entre clases. Criterios para elegir. Métodos. (CU00914C)
Java provee distintas clases para el trabajo con cadenas de texto. La
más básica, la clase String. Sin embargo existen otras clases como
StringBuffer y StringBuilder que resultan de interés porque facilitan
cierto tipo de trabajos y aportan mayor eficiencia en determinados
contextos. Vamos a estudiarlas.
La clase StringBuilder es similar a la clase String en el sentido de
que sirve para almacenar cadenas de caracteres. No obstante, presenta
algunas diferencias relevantes. Señalaremos como características de
StringBuilder a tener en cuenta:
- Su tamaño y contenido pueden modificarse. Los objetos de éste tipo son mutables. Esto es una diferencia con los String.- Debe crearse con alguno de sus costructores asociados. No se permite instanciar directamente a una cadena como sí permiten los String.
- Un StringBuilder está indexado. Cada uno de sus caracteres tiene un índice: 0 para el primero,1 para el segundo, etc.
- Los métodos de StringBuilder no están sincronizados. Esto implica que es más eficiente que StringBuffer siempre que no se requiera trabajar con múltiples hilos (threads), que es lo más habitual.
Los constructores de StringBuilder se resumen en la siguiente tabla:
Constructor
|
Descripción
|
Ejemplo
|
StringBuilder() | Construye un StringBuilder vacío y con una capacidad por defecto de 16 carácteres. | StringBuilder s = new StringBuilder(); |
StringBuilder(int capacidad) | Se le pasa la capacidad (número de caracteres) como argumento. | StringBuilder s = new StringBuilder(55); |
StringBuilder(String str) | Construye un StringBuilder en base al String que se le pasa como argumento. | StringBuilder s = new StringBuilder("hola"); |
Retorno
|
Método
|
Explicación
|
StringBuilder | append(...) | Añade al final del StringBuilder a la que se aplica, un String o la representación en forma de String de un dato asociado a una variable primitiva |
int | capacity() | Devuelve la capacidad del StringBuilder |
int | length() | Devuelve el número de caracteres del StringBuilder |
StringBuilder | reverse() | Invierte el orden de los caracteres del StringBuilder |
void | setCharAt(int indice,char ch) | Cambia el carácter indicado en el primer argumento por el carácter que se le pasa en el segundo |
char | charAt(int indice) | Devuelve el carácter asociado a la posición que se le indica en el argumento |
void | setLength(int nuevaLongitud) | Modifica la longitud. La nueva longitud no puede ser menor |
String | toString() | Convierte un StringBuilder en un String |
StringBuilder | insert(int indiceIni,String cadena) | Añade la cadena del segundo argumento a partir de la posición indicada en el primero |
StringBuilder | delete(int indiceIni,int indiceFin) | Borra la cadena de caracteres incluidos entre los dos indices indicados en los argumentos |
StringBuilder | deleteChar(int indice) | Borra el carácter indicado en el índice |
StringBuilder | replace(int indiceIni, int indiceFin,String str) | Reemplaza los caracteres comprendidos entre los dos indices por la cadena que se le pasa en el argumento |
int | indexOf (String str) | Analiza los caracteres de la cadena y encuentra el primer índice que coincide con el valor deseado |
String | subString(int indiceIni,int indiceFin) | Devuelve una cadena comprendida entre los dos índices |
CLASE STRINGBUFFER
La clase StringBuffer es similar a la clase StringBuilder, siendo la
principal diferencia que sus métodos están sincronizados, lo cual
permite trabajar con múltiples hilos de ejecución (threads).
Los constructores y métodos de StringBuffer son los mismos que los de StringBuilder.DIFERENCIAS ENTRE STRING, STRINGBUILDER Y STRINGBUFFER
Vamos a enumerar las principales diferencias entre estas tres clases:
- StringBuffer y StringBuilder son mutables, mientras
que String es inmutable. Cada vez que modificamos un String se crea un
objeto nuevo. Esto no ocurre con StringBuffer y StringBuilder.
- Los objetos String se almacenan en el Constant String Pool que es un
repositorio o almacén de cadenas, de valores de Strings. Esto se hace
con el fin de que si creamos otro String, con el mismo valor, no se cree
un nuevo objeto sino que se use el mismo y se asigne una referencia al
objeto ya creado. Los objetos StringBuffer y StringBuilder se almacenan
en el heap que es otro espacio de memoria usado en tiempo de ejecución
para almacenar las instancias de clases, objetos y arrays. Realmente no
nos interesa entrar a nivel de detalle en estas diferencias:
simplemente, recordar que los objetos String tienen diferente tratamiento que los StringBuffer y StringBuilder.
- La implementación de la clase StringBuffer es synchronized (sincronizada) mientras StringBuilder no.- El operador de concatenación “+” es implementado internamente por Java usando StringBuilder.
Texto obtenido de StringBuffer, StringBuilder Java. Ejemplo. Diferencias entre clases. Criterios para elegir. Métodos. (CU00914C)
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');
}
$("#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();
}
}
}
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:
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.
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
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.
Suscribirse a:
Entradas (Atom)