Mostrando entradas con la etiqueta beans. Mostrar todas las entradas
Mostrando entradas con la etiqueta beans. Mostrar todas las entradas

miércoles, 17 de septiembre de 2014

Obtener un valor de la tabla en un bean 11g

Descripción: En este artículo veremos cómo obtener un valor de una fila (row) de una tabla (aftable) a través de un bean. Tomaremos el valor de un atributo (attribute) y lo mostraremos en pantalla.

Nota: Puedes Descargar el ejemplo para que puedas hacer pruebas.

En este ejemplo veremos cómo mostrar un valor de una fila seleccionada en un aftable.

En primer lugar tenemos que haber creado la tabla en nuestra página.
En el ejemplo arrastraremos una view a la página de diseño (design) y se cree la tabla que muestre los datos.

vista diseño aftable
vista diseño aftable



Podemos mirar en la Page Data Binding Definition (lo que en 10g se llamaba Página de definición), cómo es la estructura de datos que se carga en la página y que contiene la tabla.

vista Page data binding definition
vista page Data Binding Definition
vista codigo Page Data Binding Definition
vista código de Page Data Binding Definition


 
Nota: La utilidad de esta información es que si en algún momento no sabemos cómo se llaman los atributos (campos) de una tabla, podamos ir a consultarlo.
Esto a veces es necesario cuando los datos no se muestran correctamente, y pueden tener como origen, en que no se ha incluido los atributos necesarios.



Tomar el valor del Page Data Binding Definition en un bean


El siguiente código devuelve el valor que se encuentra en un binding.

método para recoger un valor del binding

Vamos a explicar el código parte por parte:


        BindingContext bindingContext = BindingContext.getCurrent();
        BindingContainer bindings = bindingContext.getCurrentBindingsEntry();



En esta parte del código estamos haciendo referencia al binding vigente en este momento.
Es decir, de la página actual que se esté mostrando.
Si este código se utiliza en otras páginas será el page data definition correspondiente.


DCIteratorBinding iteratorBinding = (DCIteratorBinding) bindings.get("DepartmentsViewIterator");


Se recoge con esta instrucción el iterator que se encuentra en el binding. Este iteratorBinding, corresponde con el iterator que vimos en la página de definición.
Se recoge este iteratorBinding pues es el que gobierna el aftable, y el que nos va a indicar qué dato se encuentra seleccionado en ese momento.


        if (iteratorBinding != null)
        {
            Row currentRow = iteratorBinding.getCurrentRow();
            if (currentRow != null)
            {
                resultado = (String) currentRow.getAttribute("DepartmentName");   
            }
        }

Primero se pregunta si el itertorBinding es null.
Es importante esto porque puede que el valor que contiene la variable iteratorBinding lo sea.
Algunas de las causas por las que puede ser null:
- Que se haya escrito mal el nombre del iterator.

- Que en el momento en que se llama al iterator, éste no exista.



Es muy típico encontrarse con un nullPointerException por estas causas, por lo que se recomienda hacer siempre esta comprobación.

Una vez comprobado esto con el if , lo que se hace es obtener la fila actual. 
Para ello recurrimos al método getCurrentRow().

Otra vez, volvemos s hacer la consulta de si el valor obtenido con el getCurrentRow() es null o no.
Puede ser que no hubiera ningún elemento seleccionado.


 resultado = (String) currentRow.getAttribute("DepartmentName");   

Con esta estructura, tomamos el valor (attribute), de la fila (row) actual y que hemos guardado en currentRow.

Con esto ya tendremos en el bean el valor, y podemos utilizarlo como queramos.
En este ejemplo, lo que se hizo fue mostrar en pantalla dicho valor, y para ello, se creó un método get, con el fin de poner el valor dentro de un outputText.





Al ejecutar el ejemplo, se nos muestra la tabla con los distintos campos (attributes), y al seleccionar una fila, y luego, pulsar el botón "Actualizar", aparece al lado de éste el nombre del Departamento seleccionado.

Puedes descargar el ejemplo en este enlace: Descargar Ejemplo obtener Valor tabla
La página del ejemplo es vistaDepartamentos.jspx.

Artículos relacionados:
- Crear una tabla de Datos con aftable en 11g

sábado, 16 de agosto de 2014

Acceder a otro bean desde un bean

Descripción: En este articulo veremos cómo acceder a otro bean, y ejecutar un método o tomar el valor de una variable. Veremos los objetos getSessionMap y getRequestMap.

En primer lugar tenemos que tener en cuenta qué tipo de bean es el que queremos acceder, si es un bean de tipo session o de tipo request.
Dependiendo de cual sea, se utilizara el objeto getSessionMap (beans de tipo sesión) o getRequestMap (beans de tipo request).

Para acceder a un valor en un bean de sesión (session bean): 

Object objeto = context.getExternalContext().getSessionMap().get("nombreDelBean");
nombreDelBean objetoBean = null;
if (objeto != null)
{
     objetoBean = (nombreDelBean) objeto;
}

A partir de aquí, podemos llamar a cualquier método público del objetoBean o acceder a cualquier variable.
Esta es otra de las razones por las que es preferible crear accesors en las propiedades del bean, para no permitir el acceso directo si no es a través de una función.

Hay que tener en cuenta de que un bean de sesión no estará activo hasta que no haya sido llamado con anterioridad. Es decir, si intentamos obtener el bean que queremos obtener, si no ha sido llamado antes, no aparecerá dentro del objeto getSessionMap() o en el caso de devolvernos un valor, obtendremos un null.
Por eso se realiza la comprobación más adelante, para evitar estas situaciones.

Para acceder a un valor que se encuentra en un bean de request (request bean)

objeto = FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("nombreDelBean");
nombreDelBean objetoBean = null;
if (objeto != null)
{
     objetoBean = (nombreDelBean) objeto;
}

En objetoBean, dejamos una instancia del bean de tipo request que existe en la aplicación.


Artículos relacionados:
-
-
-


Pasar un valor del binding al bean

Descripción: En este artículo veremos cómo pasar un valor del binding hacia el bean.

Este tipo de operaciones se suelen utilizar para recoger un valor que se encuentra en el binding, por ejemplo un campo cuyo atribute value esté asignado al binding, así como otros componentes. Habitualmente, este valor se suele encontrar en el binding como atributeValue.

Para ello hacemos lo siguiente:

FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding expr;
expr = fc.getApplication().createValueBinding("#{bindings.NombreCampo.inputValue}");
if (expr != null)
        variable =  expr.getValue(fc);


Como podemos observar la estructura es muy similar a la vista en el artículo pasar un valor del bean al binding.

Debemos tener en cuenta el tipo de la variable donde vamos a guardar el valor que estamos recogiendo. No nos va a llegar con el mismo tipo con el que está definido en el viewObject, sino que muy probablemente tendremos que hacer un cast para convertir al tipo de datos que nos interesa. 

En el caso de que no se recoja el valor del binding, habría que comprobar que hemos escrito correctamente la variable, o bien si el valor se encuentra definido como AtributeValue o con otra estructura que permita recoger el valor.

Artículos relacionados:
- Acceder a otro bean desde un bean
- Pasar valores de un bean a un binding
- Pasar un valor de un bean al procesScope

Pasar valores de un bean a un binding

Descripción: En este artículo veremos cómo pasar un valor de un bean al binding en oracle ADF 10g. 

Es bastante común encontrarse que no todo puede conseguirse con un formulario y un commit, sino que es necesario hacer operaciones en un bean antes de guardarlo.

Para pasar ese resultado de nuestras operaciones al binding, para que pueda luego ser guardado con el commit del Application Module haremos lo siguiente:

FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding expr;
expr = fc.getApplication().createValueBinding("#{bindings.NombreCampo.inputValue}");
if (expr != null)
        expr.setValue(fc, valor);

La condición expr != null, viene de que podemos encontrarnos con que el valor no esté definido, o que en el momento de consultarse el bean, el binding de la página actual todavía no existe.
Esto ocurre cuando estamo llamando desde un método del bean, en un momento en el cual todavía no se ha terminado de construir la página.

Errores comunes

También debemos tener en cuenta que el nombreCampo donde queremos poner el valor en el binding, debe existir en la página de definición de la página que estamos trabajando en ese momento. Normalmente, será un elemento de tipo atributeValue, aunque puede haber otros tipos.

Puede darse el caso de que estemos reutilizando un método en un bean, que ha sido escrito pensando en una página, y ahora la estemos utilizando en otra que no contiene el mismo campo en el binding. Esto puede hacer que expr = null.

Artículos relacionados:
-
-

Pasar un valor de un bean al procesScope

Descripción: En este artículo veremos cómo pasar un valor desde un bean al processScope.
Nota: Este artículo es para Oracle ADF 10g.

El principal uso del processScope es el de poder pasar valores entre páginas.
Esta función también puede ser realizada por un bean de sesión (session bean) .

Si queremos pasar un valor a un processScope debemos seguir la siguiente estructura:

AdfFacesContext.getCurrentInstance().getProcessScope().put("Variable", valor);

En el momento de pasar el valor, hay que tener en cuenta el tipo de dato que es compatible con esta operación.

Artículos relacionados:
- Recoger el valor de un processScope en un bean
- Pasar un valor desde la pagina de diseño al ProcessScope con setActionListener
- Introducción al ProcessScope

miércoles, 13 de agosto de 2014

Recoger el valor de un processScope en un bean

Descripción: En este artículo vamos a ver cómo un valor que se encuentra en un processScope lo recoge un bean. 
Nota: Este artículo está orientado a ADF 10g.

Para recoger un valor que está en processScope, debemos tener en cuenta de que se trata de un objeto que es propio del ADF, es decir, no es algo que hemos aportado a través de una variable o de una función en nuestro código.

Utilizaremos una construcción como la siguiente:

AdfFacesContext.getCurrentInstance().getProcessScope().get("valorGuardado")

AdfFacesContext.getCurrentInstance().getProcessScope() nos lleva a tener el objeto processScope para que podamos manejarlo.

Como podemos observar por los nombres, son variables que contienen el contexto de la sesión.

En cuanto tenemos este objeto, podemos acceder a un valor concreto, dentro de ese "array asociativo". Nos basta con hacer un get con el nombre del valor que queremos recuperar para obtenerlo.

Dependiendo del tipo de variable donde vayamos a recoger el valor es posible que haya que realizar alguna conversión (operador cast).

Hay otras funciones que pueden ser de interés:
AdfFacesContext.getCurrentInstance().getProcessScope().size()
Obtiene el número de valores que hay en ese momento en el processScope.

AdfFacesContext.getCurrentInstance().getProcessScope().clear()
Borra todos los valores guardados

Consejo:
Cuando recogemos un valor guardado en un processScope, puede que tenga un valor nulo.
Recomendaría una comprobación de que dicho valor se encuentra, antes de operar con él. Es más, cada vez que se vaya a recoger un valor de un processScope habría incluir dicha comprobación.
La razón es que hay que estar muy seguro de que eso no pueda ocurrir durante la ejecución de la aplicación.



Artículos relacionados:
- Pasar un valor desde la página de diseño al processScope con setActionListener

lunes, 30 de junio de 2014

Cómo funciona un session bean

Resumen: En este artículo vamos a ver cómo se ejecuta un session bean, observando su paso por el constructor.
En el artículo anterior (
) observamos que para un request bean, se pasaba por el constructor cada vez que se entraba en una página, o mejor dicho, que se entraba en el ciclo de ejecución o de generación de la página.

Nota: Puedes descargar el ejemplo (para 10g) en el siguiente enlace

Vamos a tomar el ejemplo anterior, y cambiamos el bean que era inicialmente de tipo Request a Session Bean.
Para ello modificamos desde el faces-config visualmente, aunque también lo podemos hacer a través de un editor.

vista faces-config
vista faces-config

cambio de Scope (ámbito)
cambio de Scope (ámbito)


Al modificarse el faces-config.xml, es recomendable hacer un " Rebuild" previo a una ejecución.
La razón, es que la ejecución toma ciertos cambios en la aplicación, pero no todos, mientra que un "rebuild" toma el proyecto y reconstruye la información interna que necesita para poder ejecutar la aplicación.
Es por esta razón, que en ocasiones, realizamos modificaciones, y la aplicaciones parece no darse cuenta de los cambios.

El "rebuild" se hace sobre la aplicación entera (Ejemplo01) o bien sobre un proyecto (Model o ViewController).

Tras hacer el "rebuild" ejecutamos la aplicación, y observamos el resutlado.

vista navegador
vista resultado en el navegador

mensajes durante ejecucion
mensajes durante ejecución

Como podemos ver aparentemente son similares los comportamientos.
Si pulsamos (F5 o Ctrol + R) y observamos la consola de mensajes, podemos ver que sólo tenemos una línea indicando que se ha pasado por el constructor.
La razón de esto, es que al ser un session bean, sólo se ejecuta el constructor una sóla vez durante esa sesión, que aunque refresquemos la página o nos vayamos a otra página de la aplicación, la instancia vigente será siempre la misma.

Esta diferencia es importante saberla, a la hora de guardar datos de la aplicación.
Por ejemplo, en una página que ejecute un proceso que tiene varios pasos (proceso de darse de alta en una aplicación, matriculación en un centro, asistente por pasos online etc), es importante saber en qué lugar colocar la información que se va recogiendo. Habrá alguna que sea propia de cada paso, y que podría estar en un bean de tipo request, pero otros datos, que son necesarios mantener hasta el final del proceso, sería entonces adecuado tenerla en un session bean.

Artículos relacionados:
-

-
-


Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter

viernes, 27 de junio de 2014

Cómo funciona un bean request

Resumen: En este post vamos a ver el funcionamiento de un bean request. Veremos cuántas veces puede ser llamado durante la creación de una página hasta mostrar ésta.
Para ello utilizaremos el constructor del bean al que le pondremos un indicador que nos informe de que se ha ejecutado.
Esto lo haremos mostrando un mensaje en la consola (Messages - log), con la siguiente instrucción:

System.out.println("entrada al constructor");

codigo bean
vista del bean



En nuestro ejemplo, vamos a mostrar en pantalla dos valores que nos vendrá devueltos tras llamar a un método.
En este caso, los métodos los he llamado getTexto1() y getTexto2().
La razón de que sean métodos get ( accesors) es que desde la página jspx no podemos acceder al valor de una variable sino a través de un método "getter".

nuevas funciones get
funciones getter




Creamos la página (.jspx) en la cual vamos a mostrar los datos que se encuentran en los métodos indicados (ejemploBeanRequest.jspx).



creacion pagina jspx
creación de página jspx

Añadimos los OutputText que van a mostrar los textos que se encuentran en los métodos.

incluir outputtext
incluir OutputText


Enlazamos los outputText con los métodos que nos van a devolver el valor.

seleccionar binding
imagen de error al seleccionar binding


Típico error por despiste: Pulsando el atributo "Binding" (vincular), seleccionamos el bean, y la función correspondiente.
Como podemos observar en la siguiente imagen, no están disponibles los métodos que habíamos creado.
La razón es que esta vinculación se refiere a nivel de componente (CoreOutputText), y lo que hace es vincular el componente completo OutputText que tenemos en pantalla con un método que nos devuelve un componente.

binding funcion bean
binding a función de bean



Paso correcto: Se debe seleccionar el atribute "Value" que va a contener el valor que queremos que contenga el componente, con la opción "bind to data".

atributo value bind to data
atributo Value de OutputText

expression language binding
expresión del lenguaje (EL) que vincula el atributo Value con una función getter

expression language bind to funcion getter
expresión del lenguaje (EL) que vincula el atributo Value con una función getter


Ejecutamos la página y observamos el resultado.

ejecutar la pagina
ejecución de la página

resultado ejecucion
resultado ejecución



Observemos en la consola "Running embedded OC4J - Log (o el correspondiente servidor en 11g).

consola log
consola log


Como podemos observar, sólo se ha ejecutado una vez el constructor.
Si refrescáramos la página (F5 o Ctrol + R), veríamos que se vuelve a ejecutar el constructor.

mensajes llamada constructor
Messages - tras pulsar F5


Como conclusión, un request bean se ejecuta o mejor dicho, su ciclo de vida comienza y termina con la página.

Artículos relacionados:
-

-
-


Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter

viernes, 20 de junio de 2014

Beans scope - Ámbitos de los beans

Resumen: En este artículo se presentarán los tipos de beans que existen, de acuerdo al ámbito al que se definen en su declaración.

En los beans se define un ámbito ( bean scope). Este ámbito se refiere principalmente a la información que contiene y que es mantenida durante la vida del bean.
No se debe confundir con el ámbito de las variables dentro de un bean (variables locales y globales).

Los tipos que se definen son:
- Application
: La información que contienen está disponible durante todo el tiempo de vida de la aplicación, mientras ésta se encuentra en marcha, y no se ha llamado al destructor correspondiente.

- Request: Este tipo de beans se instancia cada vez que se llama a un método de ésta, y se destruye una vez se entrega el control al cliente. Es decir, que tiene validez durante la creación de la página que va a mostrar, y luego, cuando se termine de generar ésta, la información que contienen desaparece.

- session: En este tipo de beans, la informacion está disponible durante la sesión del usuario.
La sesión no significa exactamente con la pestaña del navegador abierta, pues se puede mantener la sesión incluso cuando se cierra la pestaña. Por ello se puede entender que la sesión termina, o bien cuando se hace de forma manual en la aplicación, cuando se produce un tiempo de inactividad (session_timout) o bien cuando se cierra completamente el navegador.

- none: Este bean es instanciado cada vez que se referencia.

En la versión 11g, se añaden otros nuevos ámbitos para los beans:

- Page Flow: Su duración se encuentra delimitada por la ejecución de un bounded task flow.
Este tipo de ámbito no es estándar de JSF.

- Ámbito de backing bean: Es usado por "managed beans" para fragmentos de página y declarative components. Estará disponible hasta que entregue al cliente el control de la página.
Este tipo de ámbito no es estándar de JSF.

-
View scope: Está disponible hasta que el ID de la view actual cambie. La información se mantiene en la aplicación hasta que el id de la view cambie.
Este tipo de ámbito no es estándar de JSF.

Fuentes para este artículo:
(PDF)
11.5.1 How to Create and Configure a Backing Bean


20.4 Using a managed Bean in a Fusion Web Application

Artículos relacionados
- Cómo funciona un bean request

viernes, 2 de mayo de 2014

Mostrar un valor de un bean

Resumen: En este post se va a explicar cómo tomar un valor de un bean y mostrarlo en pantalla.
Se puede descargar el siguiente fichero que contiene el ejemplo Descargar Ejemplo.
Aunque las imágenes y el ejemplo son en 11g, los pasos que se van a mostrar son equivalentes para 10g.

En la siguiente imagen podemos ver el bean ejemploBean, que inicialmente está vacío.
Creamos la variable de tipo String cadenaTexto que se utilizará para mostrar el mensaje.
No es necesario que sea una variable de tipo String, puede ser int, o de otro tipo, pero sí debe ser un tipo primitivo. Por ejemplo los Number no se pueden escribir directamente en pantalla, sino a través de llamar a un método que devuelva el contenido en un formato que sí permita mostrarlo.



bean nueva propiedad

Tras crear la variable, se deben crear los accessors (método get y set).
Esto se puede hacer seleccionando con el botón derecho en la propiedad creada, y elegir "generate accessors
" del menú contextual.

Aparte de ser una buena práctica crear los accesors de las propiedades, es obligatorio a la hora de mostrar un valor referirse a través de un método get. Si no es así, no va a mostrar la propiedad ni la va a reconocer cuando lo pongamos en el jspx.


generate accessors

En el proceso de generar accesors
, se nos pregunta sobre qué variables crear (por si se quisiera crear para otras variables), además de si se desea el get y el set.
En este ejemplo marcamos ambos.

generate accessors

Una vez creados los accessors, este es el resultado del bean.

accessors get y set



A continuación vamos al jspx, donde queremos mostrar el valor.
Todo lo que sea presentar información en la pantalla tiene que pasar por el jspx.
Utilizamos para este ejemplo un outputText, y en el atributo Value, ponemos la expresión que nos indica que tomamos el valor el bean.

Probemos a hacer lo siguiente: En el campo Value escribir #{EjemploBean.}.
A continuación del punto, pulsamos Ctrl+Space para que el autocompletar
nos muestre las opciones.
En la siguiente imagen vemos que nos muestra el nombre del método (sin el get), no confundir con el nombre de la variable.


autocomplete jspx

El autocompletar, aparte de ayudarnos a la hora de escribir el código en el jspx, nos indica también si algo no va bien. Por ejemplo en este caso, si el método que esperábamos, no aparece, quiere decir que algo se ha hecho mal en el código, y por eso no lo reconoce.
Por ejemplo, cuando el método get no ha sido creado correctamente, o cuando nos equivocamos al crear un bean (como en el ejemplo crear un bean , donde se crea una clase Java, que no resulta ser un bean).


codigo jspx para mostrar valor del bean

Guardamos todo y ejecutamos la aplicación para ver el resultado.

pagina resultado
vista página resultado

Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter  

lunes, 28 de abril de 2014

Crear un bean en 11g

Resumen: En los artículos anteriores hemos visto cómo crear un bean en 10g, así como ver dónde se encuentra la información del bean en la aplicación (faces-config.xml).

En 11g, algunas cosas varían un poco. La filosofía es la misma, un bean no es tan solo una clase, o mejor dicho una clase Java no significa que sea un bean.

Vamos a mostrar con pasos similares al artículo anterior cómo crearlo.

Supongamos que queramos crear un bean que guardará un valor que queremos mostrar en pantalla.
Para ello, colocamos en nuestra vista de Design (diseño), un outputText, que contendrá dicho valor.

vista general jdeveloper
vista JDeveloper




Lo arrastramos desde el Component Palette hasta su lugar en la página.
Si tenemos problemas para ponerlo, podemos ayudarnos de la vista Structure, y arrastrar el componente al lugar que va a estar dentro de la página.

incluir OutputText a la pagina
incluir OutputText a la página

 

 Una vez ahí, seleccionamos el outputText, y en el atribute Value vamos a indicar que el valor que va a mostrar se encuentra en un bean. Para ello elegimos dentro de las posibles fuentes que nos ofrece el atributo "Value" Expression Builder.

expression builder
expression builder


Seleccionamos ADF Managed Bean, y como podemos ver, hay un botón que dice Create Managed Bean
.
Lo pulsamos y se abre la siguiente ventana.


create managed bean



En Bean name y Class Name, ponemos el mismo nombre.
En Package, por defecto nos aparece view, sin embargo, para separar en un package distinto y poner ahí todos los beans, se pone en su lugar "bean".

Al hacer esto, se nos muestra otra vez el Expression Builder
, para que elijamos la fuente.

expression builder nuevo bean
expression builder con el nuevo bean

Como vemos, aparece nuestro bean, y también dentro de la carpeta requestScope. Si miramos el momento de la creación del bean, tenía por defecto que era de tipo request.

Lo cerramos, para centrarnos en cómo ha quedado el proyecto al añadir el bean.
El código de este bean es el siguiente:

codigo bean
código del nuevo bean

A diferencia de post anterior, no hemos creado accessors (metodos get y set). Éstos se irán añadiendo a medida que incluyamos propiedades.

Otro lugar importante para observar es dónde se guarda la información sobre el nuevo bean.
Recordemos que en 10g, se guardaba en el fichero faces-config.xml.
En 11g, esta información se guarda en el fichero adfc-config.xml

Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter




jueves, 17 de abril de 2014

Crear Bean 2/2

Resumen: En este artículo vamos a crear un bean, de forma correcta.
En el anterior artículo (), se creó una clase de Java, que no resultó ser un bean.
Ahora veremos los pasos para crear un bean aprovechando los asistentes que nos pone JDeveloper.

Nota: Este artículo está orientado a 10g. Si quieres ver una versión para 11g, puedes verlo en el siguiente artículo: Crear un bean en 11g.

Un bean, como habíamos dicho anteriormente, se puede utilizar para poner un valor en un componente. Así que en nuestro ejemplo haremos lo siguiente:
Desde Components Palette, arrastramos un OutputText, y una vez ahí, en el Property Inspector, seleccionamos el atributo "Bind", y ahí, el botón con los puntos suspensivos "...".

property inspector bind
vista general JDeveloper


bean binding




En Managed Bean, nos dice que no hay ninguno.
Nota: En el post anterior habíamos creado uno, y el asistente no reconoce que exista. Este es otro síntoma de que algo no se ha hecho bien.

Pulsemos "New", para crear el nuevo Bean.
seleccion request bean
selección tipo de bean



Ponemos el nombre del bean, que habíamos creado antes, para que ahora lo tome en cuenta. ejemploBean.

En Scope, se nos pregunta el ámbito que va a tener el bean. Más adelante veremos lo que significa esto, por ahora seleccionaremos request.

En el class Browser, seleccionamos beans/ejemploBean, para seleccionar la clase Java que habíamos creado anteriormente.

class browser
navegador de clases (class browser)





Una vez creado, nos vuelve al cuadro para seleccionar el property.

binding bean property
bean property



Pulsamos "New", y le damos el nombre de tituloPagina.

Una vez hecho esto tenemos lo siguiente:

bean source
Fuente Bean (source)

Podemos observar los métodos que se han creado. setTituloPagina y getTituloPagina. Esto es lo que se llaman accesors, y que sirven para poner y tomar el valor de una variable.

En este caso, nuestra variable es de tipo CoreOutputText. Este tipo corresponde al del OutputText que hemos puesto en la página. Es decir, que no estamos tratando con una String al que ponerle un título. Sino que estamos trando con el componente ADF. Es decir, que podremos cambiar el valor (value) pero también podemos cambiar el estilo, si es visible o no, con todos sus métodos, y las propiedades que podemos ver en el Property Inspector.

Por esto, un bean es muy potente, pero también es muy manual, porque tendremos que hacerlo todo nosotros.


Si vamos luego al faces-config, podemos ver cómo su contenido ha cambiado:

bean faces-config
vista faces-config.xml




Ahora aparece el bean, correctamente y podemos estar seguro de que puede ser utilizado en nuestra aplicación como tal.

Nota: En muchos errores en los que se crea un bean, y éste no es accesible, o no se encuentra, lo que hemos hecho, de mirar en el faces-config, ayuda a saber dónde está la causa. Por ejemplo, no se creó correctamente, o el nombre es distinto al que ponemos (las mayúsculas/minúsculas suelen ser la causa), etc.
Con lo que hemos hecho, sabemos un poco más de cómo funcionan las cosas por dentro.


Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter  


lunes, 14 de abril de 2014

Crear Bean 1/2

Resumen: En este post vamos a crear un Bean. Seguiremos en primer lugar unos pasos para crear una clase Java (Java Class), y luego veremos que esta no es la manera más idónea.
Para ir al método correcto se puede acceder al artículo
Nota: Gran parte de lo que se muestra es válido tanto para 10g como para 11g. Más adelante se hará un ejemplo en 11g porque hay algunas diferencias, especialmente en el faces-config.

Un bean, es una clase Java que nos permite incluir operaciones de muchos tipos. En un Bean podemos hacer muchas de las cosas que hemos visto con objetos y funciones, que nos ofrece ADF de forma visual, de forma manual. Por eso es recomendable dejar en el bean sólo aquellas funciones que no se pueden hacer por los otros medios (por errores y por tiempo).

Forma NO recomendable (pero que hay que conocer)

Tal como hemos visto con las entidades y otros objetos del Model, se podría pensar en crear el bean de la misma manera en la pestaña de Applications Navigator.


create new java class
crear nueva Java Class




gallery seleccion Java Class
seleccion java Class


datos clase nueva
create Java Class



Ponemos el nombre (name) de la clase, en este caso: ejemploBean.
El Package, aparecía views, pero vamos a crear el package "beans", para que no se nos quede todo junto.
Lo demás lo dejamos igual.

Nota: No se marca " Generate Main Method" para crear un bean.


vista nueva clase
vista nueva clase




El JDeveloper nos muestra el nuevo bean creado en la pestaña Applications Navigator, dentro del package Beans.
En el bloque central tenemos el código que nos ha generado.

Los beans, aparte de crearse deben aparecer referenciados en la aplicación para su uso.
En 10g, aparecen dentro del fichero faces-config.xml.
Nota: en 11g, aparecen en otro fichero, ya lo veremos en otro post.

Vayamos a ver el fichero faces-config:


faces-config.xml
faces-config.xml (solo 10g)


contenido faces-config.xml
contenido faces-config.xml (solo 10g)

Como podemos comprobar, el fichero ejemploBean, no aparece en el fichero faces-config.xml.


La razón es que una clase Java NO tiene por qué ser un bean. Es decir, que en nuestro proyecto podemos tener clases Java que realizan funciones, pero que no participarán de la misma manera que puede ser un bean.
Por ejemplo, las funciones bean, pueden ser llamadas desde páginas jspx, o los valores tomados desde una página de definición, que como hemos visto, es gran parte del potencial del ADF.
La existencia de clases Java que no actúen como bean, tienen sentido por ejemplo en funciones muy especializadas: algoritmos de codificación, crear PDF's, funciones gráficas, etc. Son funciones que podrán ser llamadas desde un bean, pero no desde un jspx por ejemplo.

En el veremos más sobre la creación de beans.

Artículos relacionados
-
-
-


Puedes estar al tanto de las novedades en twitter @ADFSalvaje. o siguiendo este blog, o teniéndolo en el Navegador en tus Favoritos (Ctrl+D).