Fetishcode…Thinking in objects

Abrir enlace en nueva ventana

Publicado en ADF by fetishcode en Junio 30th, 2008

Cuando trabajamos con ADF Faces y queremos abrir un enlace en una nueva ventana, es decir hacer uso de target=”_blank” tenemos varias opciones.

Una es hacer uso del componente golink y la propiedad targetFrame

<af :goLink destination="http://www.fetishcode.wordpress.com" targetFrame="_blank"/>

Otra opción, es hacer uso de la propiedad target del propio form. Esta última es útil cuando tenemos la necesidad de hacer uso de commandbuttons o commandlinks.

<h :form target="_blank"> </h>
Etiqueta con:,

findByKey and setCurrentRow

Publicado en ADF by fetishcode en Febrero 26th, 2008

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.

Etiqueta con:, , ,

JavaServer Faces Expression Language

Publicado en JSF by fetishcode en Febrero 24th, 2008

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.

Etiqueta con:,

SelecOneChoice en tablas

Publicado en ADF by fetishcode en Febrero 4th, 2008

Uno de los problemas mas comunes al desarrollar con ADF, una vez hemos pasado de la fase inicial de típicos Maestro/Detalle, es el famoso selectonechoice o lista despegable dentro de una tabla.

Para conseguirlo debemos recorrernos los elementos de la lista mediante un for each.

Les dejo un ejemplo en formato vídeo de Steve Muench.

Espero que en la nueva y esperada version 11g, este tema este mejor planteado.

Etiqueta con:, ,

Logging ADF

Publicado en ADF by fetishcode en Enero 9th, 2008

How to use and configure ADF Logger

El sistema de trazas o logging que utiliza ADF se denomina Java Logging . Este sistema de trazas no requeire el uso de ninguna librería extra ya que viene incluida en el propio JDK, desde la version 1.4.

Para poder hacer uso de este sitema de trazas en nuestro proyecto bastara con registrar un logger en la clase:


private static Logger logger = Logger.getLogger("milog");
logger.info("info");
logger.fine("fine");

El fichero dec onfiguración del sistema de trazas se llama logging.properties y se encuentra en: /jdk/jre/lib/logging.propertiesTambién podemos indicar un fichero propio, en tiempo de diseño, idicándolo en JDEV_HOME/jdev/bin/jdev.conf mediante la siguiente linea:
AddVMOption -Djava.util.logging.config.file=path y nombre del fichero propertiesPor otro lado todos los loggers que ADF utiliza los tiene registrados y configurados en el fichero j2ee-logging.xml que lo encontramos…
Dentro del Jdeveloper en: /jdev/system/oracle.j2ee.10.1.3.xx.xx/embedded-oc4j/config
en el OAS:
/j2ee//config
Y en un OC4J en: /j2ee/home/configOtra opción, y quizá la mas extendida, es configurar nuestro proyecto para Jakarta-Log4j.

Mas información: ADF-Logging

Etiqueta con:, , ,

Templates en ADF

Publicado en ADF by fetishcode en Octubre 3rd, 2007

Muchas veces cuando desarrollamos una aplicación, hay ciertas partes que siempre se repiten como es el logo, la sección de información de usuario, etc.

En general estas partes estas determinadas por lo que en ADF/JSF se denominan PanelPage Facets, tal como podemos ver en la guía ADF Developer’s Guide.

Lo ideal a la hora de desarrollar nuestras pantalla seria que ciertas secciones comunes las definiéramos en un solo lugar. De esta forma solo deberemos hacer cambios en ese lugar y se reflejara en todas las páginas de la aplicación. Tendriamos una especie de plantillas.

Par conseguir esto podemos hacer uso de jsp:incluye:

<f:facet name="menuGlobal">
<f:subview id="globalMenufragment">
<jsp:include page="/plantillas/plantillaglobalMenu.jspx"/>
</f:subview>
</f:facet>

O de las regions:

 

  <af:region regionType="oracle.adfdemo.region.stock" >
   <f:attribute name="symbol" value="ORCL"/>
   <f:attribute name="desc" value="Oracle Corp"/>
 </af:region>
Etiqueta con:

Menú Dinámico con ADF

Publicado en ADF by fetishcode en Agosto 6th, 2007

Fetishcode sigue colaborando con el equipo de Jdeveloperla

Hace unos días hemos subido un articulo sobre la Construcción de un Menú Dinámico en ADF/JSF en el portal de Jdeveloperla.

Aqui tienen el enlace, Construcción de un Menú Dinámico con ADF

Espero que les sea de utilidad.

Etiqueta con:, ,

JDeveloper 10.1.3.3 Available

Publicado en ADF by fetishcode en Junio 29th, 2007

JDeveloper 10.1.3.3 (Build 4157) is now in production

JDeveloper 10.1.3.3 (Build 4157) ya ha salido a producción. Se puede descargar desde OTN.
Y como no podia ser de otra manera,la lista de bugs Aqui.

Etiqueta con:, ,

Table Multi-selection en ADF Faces

Publicado en ADF by fetishcode en Abril 12th, 2007

How to get rows from af:table multi-selection.
Este metodo sirve para saber que filas nos han seleccionado en una tabla de selección múltiple.

public String obtenerSeleccion() {
   BindingContainer BC=(BindingContainer)Utils.resolveExpression("#{bindings}");
   DCIteratorBinding miView= (DCIteratorBinding) BC.get("miViewView1Iterator");
   RowSetIterator miViewIter = miView.getRowSetIterator();

   RowKeySet selection = this.getTable1().getSelectionState();
   Set keySet = selection.getKeySet();
   Iterator itr = keySet.iterator();
   while (itr.hasNext()) {
         Key key = (Key)itr.next();
         Row row  = miViewIter.getRow(key);
         System.out.println("Seleccionamos: " + row.getAttribute(miViewViewRowImpl.NOMBRE));}
   return null;}
Etiqueta con:

La forma correcta de crear una Row

Publicado en ADF by fetishsue en Noviembre 10th, 2006

In this post we will comment the preferred way to programmatically create a new viewObject row.

Continuando con el post anterior vamos a comentar la forma correcta de crear una row mediante código. Y esque los malos hábitos pasan factura, como aprender a hacer las cosas sin documentarse previamente. En neustro caso, siempre que hemos creado una row manualmente lo hemos hecho simplemente llamando al método createRow() de la view, y esto no solo trae la problemática comentada en el post anterior, sino que si además tenemos customizado el método create() de esa view, al crear una row y rellenar sus campos de esta manera:


OneViewRowImpl row = (OneViewRowImpl)
app.findViewObject("OneView1").createRow();
row.setDescripcion("ejemplo");

podremos comprobar que se crea dos veces el objeto row, pasando así dos veces por el método create() de la view. Si como en nuestro caso hemos customizado este método para establecer unos attr por defecto, como calcular el attr “Codigo” adecuado siguiendo una ecuación, veremos como nuestra aplicación calcula dos veces este “Codigo” con el consecuente error.Y es que si hubieramos leído atentamente la seccion 7.8 Working Programmatically with Entity-Based View Objects de la ADF Developer’s Guide for Forms/4GL Developers
habriamos visto que la forma correcta de crear un nueva row es:


ViewObject v = app.findViewObject("OneView1");
OneViewRowImpl row = (OneViewRowImpl)v.createRow();
v.insertRow(row);
Etiqueta con:,