Reseteo de etiquetas CSS
Los que desarrollamos aplicaciones web, siempre tenemos que tener en cuenta el tema de los navegadores. Nuestra aplicación debe verse igual, o por lo menos sin cambios muy bruscos en todos ellos.
Para conseguir esto, una de las técnicas se basa en resetear ciertas etiquetas antes de definirlas en nuestro css.
El grupo de desarrolladores de yahoo nos proporciona una de estas hojas de estilo de reset: yui-reset
Fetishcode cumple dos años.
Ya llevamos dos años en wordpress y parece que fue ayer.
Este blog nació con el objetivo de poder tener una herramienta que nos permitiera publicar aquellas cosas que nos encontramos en nuestra labor diaria como desarrolladores de software, y de esta forma también poder ayudar a gente como nosotros.
No tenemos más objetivos que ese, queríamos un sitio que no nos diera preocupaciones ni queremos perder excesivo tiempo en actualizaciones, plantillas, etc. Es decir un sitio donde escribir y listo.
Quizá en un tiempo nos planteamos algo más profesional pero de momento aquí estamos muy bien. WordPress nos ofrece un servicio de mucha calidad y no tenemos queja ninguna. Al contrario queremos desde aquí dar las gracias a WordPress y a todo su equipo por el servicio brindado.
Y bueno llegados a este punto queremos compartir con vosotros las estadísticas de este último año. (Mayo 2007 – Mayo 2008.)
Para nosotros teniendo en cuenta la temática del sitio es todo un honor haber triplicado las visitas este ultimo año.
Hemos obtenido, por parte de Google un PR de 4 y en Technorati tenemos un Rank de 5,137,428.
Finalmente despedirme y espero que el año proximo sigamos creciendo y publicando artículos que sean de utilidad para ustedes.
Paso de parámetros entre paginas jspx.
Passing parameters between jspx pages
Cuando trabajamos en ADF Faces muchas veces tenemos la necesidad de pasarnos información entre páginas. Pero no queremos hacerlo mediante la url del tipo http://url?parametro=valorparametro.
Para ello podemos usar la map de sesión, donde iremos añadiendo los parámetros que queramos antes de efectuar la regla de navegación que nos lleva a la pagina destino, la cual queremos que reciba los parámetros.
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("param","valorparam");
Para recogerlo:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("param");
Nota: esta no es la única forma de pasar parámetros entre paginas.
Utilidades II
Safari:Apple ha liberdo su navegador para Windows. La verdad es que es una delicia. Sobretodo teniendo en cuenta la cantidad de recursos que consume Firefox, en mi opinión cada vez esta peor.
Atención al menú de Desarrollo que viene incluido en safari,toda una alternativa al magnifico Firebug.
Multiple IE : Poder tener varias versiónes de Internet Explorer en una sola maquina.
ForWebDesigners: mas de 400 recursos webs para desarrolladores, organizados por categorías.
Combos dependientes en jsp con AJAX.
Para ello lo que haremos será crear los combos dependientes en jsp separados,llamarles via ajax y el resultado incrustarlo en el jsp que contiene el formulario con el combo principal.
A continuación un pequeño ejemplo:
Jsp Principal:
<form name="formulario" action="action.jsp" method="POST" id="formulario">
<div>
<label for="comboprincipal"> comboPrincipal </label>
<select name=" comboprincipal " id=" comboprincipal " onchange="javascript:cargarCombo(' combodependiente.jsp', 'comboprincipal', div_combodependiente)">
<option value="">Selecciona</option>
< %//cogemos valores de la bbdd%>
</select>
</div>
<div id="div_combodependiente">
<label for="combodependiente">comboDependiente</label>
<select name="combodependiente" id="combodependiente" ></select>
</div>
</form>
A continuación el javascript que hace la peticion AJAX del jsp combodependiente. Este método recibe tres parámetros:el jsp que tiene que llamar, el campo que ha recogido del combodeprincipal, del cual depende y el id del componente html donde volcara el resultado de la petición Ajax.
/*PETICIONES AJAX PARA COMBOS ANIDADOS*/
var peticion = false;
var testPasado = false;
try {
peticion = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
peticion = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
peticion = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
peticion = false;
}
}
}
if (!peticion)
alert("ERROR AL INICIALIZAR!");
function cargarCombo (url, comboAnterior, element_id) {
//Obtenemos el contenido del div
//donde se cargaran los resultados
var element = document.getElementById(element_id);
//Obtenemos el valor seleccionado del combo anterior
var valordepende = document.getElementById(comboAnterior)
var x = valordepende.value
//construimos la url definitiva
//pasando como parametro el valor seleccionado
var fragment_url = url+'?Id='+x;
element.innerHTML = '<img src="Imagenes/loading.gif" />';
//abrimos la url
peticion.open("GET", fragment_url);
peticion.onreadystatechange = function() {
if (peticion.readyState == 4) {
//escribimos la respuesta
element.innerHTML = peticion.responseText;
}
}
peticion.send(null);
}
Y por último el combodependiente.jsp
< %
out.println("<label for='combodependiente'> comboDependiente ");
out.println("<select name='combodependiente' id='combodependiente' >");
out.println("<option value=''>Selecciona</option>");
//recogemos el parámetro
if(request.getParameter("Id")!=null){ //cogemos valores de la bbdd
}
%>
Como veis en el combodependiente.jsp solo cargamos los posibles valores del combo sin el elemento contenedor “Select” ya que este se implementa en el jsp principal.
Nota:El JavaScript fue sacado de http://www.webintenta.com
Actualización:En el combodependiente.jsp es importante cargar todo mediante out.println sino no funciona en IE7
Obtener información de la conexión JDBC en ADF
Vayamos directos al tema:
private void getInfoConnection() throws SQLException {
PreparedStatement st = getDBTransaction().createPreparedStatement("commit",1);
Connection conn = st.getConnection();
// Creamos un objeto DatabaseMetaData
DatabaseMetaData meta = conn.getMetaData();
// Obtnemos la informacion del driver:
System.out.println("JDBC driver version:" + meta.getDriverVersion());
st.close();
}
Este método esta inspirado en el artículo de S.Muench How Can I Access the Current Database Connection Object?
Business Rules in Adf
businessrulesinadfbctechnicalwp.pdf. Documento muy interesante que nos explica como implementar las reglas de negocio en Adf y como funciona la capa de modelo.
Presten atención a las consideraciones de diseño que nos indican. Mas de una nos puede resolver problemas y dudas típicos en el desarrollo de reglas en Adf.
findByKey and setCurrentRow
Método que dado el nombre de un ViewObject y una lista de keys nos realiza una búsqueda mediante el método findByKey y nos setea la primera de las rows como currrentRow.
public void setCurrentRowViewObject(String nomview, List l){
try{
Iterator it = l.listIterator(0);
ViewObject vo=findViewObject(nomview);
Object[] keyValues=new Object[l.size()];
for(int i=0; it.hasNext();i++){
Object item = it.next();
keyValues[i]=item;
}
Row[] r = vo.findByKey(new Key(keyValues),1);
if (r != null && r.length > 0) {
vo.setCurrentRow(r[0]);}
} catch (Exception ex) {}
}
Un método muy útil para tener en nuestra clase de Utils o en nuestro AppmoduleImpl.
JavaServer Faces Expression Language
En algunos posts anteriores comentábamos que no siempre sacamos el máximo del .jspx en nuestras aplicaciones JSF. A menudo olvidamos que una de las partes fundamentales que componen JSF es un lenguaje de expresiones ( EL) .
A continuación les dejamos un enlace de Sun donde explican en detalle todas las operaciones que podemos realizar mediante EL, JSF Expression Language.
Metodos mas usados en ADF BC
Documento muy interesante sobre los métodos más utilizados en ADF BC.
Con una breve descripción de los métodos y una clasificación de estos por capas.
Aunque es un poco antiguo creo que puede ser una buena referencia para usuarios a iniciados en ADF.
Documento: Most Commonly Used Methods in ADF Business Components
