Pasando Parámetros a una Página desde un Bean

El requerimiento es que se quiere pasar algún tipo de información a la Interfase del Usuario, esta información es generada a través de un Bean. La idea es que en el momento que la página sea desplegada se presente la información.

En este ejemplo vamos a crear un Bean llamado myTest el cual contiene un método que retorna una cadena de caracteres. El objetivo es utilizar este método para asignar el título a una página. El codigo del Bean es:

public class MyTest {
    public MyTest(){
    }
        public String retornaCadena(String myString){
            String result = "Navegando en el Departamento: "+myString;
            System.out.println(result);
            return result;
        }
}DataControl

Luego creamos un Datacontrol para este bean el cual nos va permitir hacer el binding a este método. Esta no es la única forma en que podemos exponer la lógica para las interfaces, podríamos también empaquetar este bean y su data control dentro de un archivo JAR e importarlo en otros proyectos, esto nos va a permitir visualizar el Data control de la misma forma.

 

A continuación creamos un par de proyectos, uno para los serviciPaginaInicialos (lógica de negocio) y otro para el UI. Por el lado de los servicios para este ejemplo vamos a crear Business Components para la tabla Departments del esquema HR. Para la interfase de usuario creamos una nueva página JSF y adicionamos un panelHeader y una forma de lectura (Read Only Form) con opciones de navegación del Departamento.

methodBinding Para asignar el encabezado del panelHeader utilizando el método, vamos al tab de bindings, creamos un nuevo MethodAction binding donde seleccionamos le método del datacontrol y al parámetro de entrada vamos a utilizar el binding del nombre del departamento.

Este binding requiere de algún ejecutable para poder ser invocado por lo cual creamos también un nuevo ejecutable de tipo invokeAction, buscamos el methodBinding que acabamos de crear y damos un id cualquiera. Una vez lo hayamos definido ajuste la propiedad de refresh de este ejecutable a ifNeeded, esto hace que cada vez que naveguemos a otro departamento el método va a ser ejecutado.

Finalmente para asignar el encabezado tenemos que crear un variableIterator en los ejecutable que mapee la variable de retorno del método y un attributeValue binding. Sin embargo esta parte la podemos hacer de manera automática si dentro de la página arrastramos y soltamos el valor de retorno del método y lo mapeamos como un outPutText, luego si volvemos a los bindings vamos a poder ver la estructura creada de esta forma:resultado

 

 

 

 

El código objetivo en el pageDef es:

<executables>

...
    <invokeAction Binds="retornaCadena" id="invocaMetodo" Refresh="ifNeeded"/>
    <variableIterator id="variables">
      <variable Type="java.lang.String" Name="retornaCadena_Return"
                IsQueriable="false" IsUpdateable="0"
                DefaultValue="${bindings.retornaCadena.result}"/>
    </variableIterator>
  </executables>
  <bindings>
...       

<methodAction id="retornaCadena" InstanceName="MyTest.dataProvider"
                  DataControl="MyTest" RequiresUpdateModel="true"
                  Action="invokeMethod" MethodName="retornaCadena"
                  IsViewObjectMethod="false"                  ReturnName="MyTest.methodResults.retornaCadena_MyTest_dataProvider_retornaCadena_result">
      <NamedData NDName="myString" NDValue="${bindings.DepartmentName}"
                 NDType="java.lang.String"/>
    </methodAction>
    <attributeValues IterBinding="variables" id="Return">
      <AttrNames>
        <Item Value="retornaCadena_Return"/>
      </AttrNames>
    </attributeValues>
  </bindings>

Para finalizar en la propiedad Text del panelHeader ya podemos hacer el binding del resultado del método #{bindings.Return.inputValue} y tendriamos como página terminada

resultadoFinal

Este ejemplo aplica cuando se quiere determinar de manera dinámica los strings de una página a través de un ResourceBundle o también enviar valores calculados bajo cierta lógica.


One Response to Pasando Parámetros a una Página desde un Bean

Anónimo dijo...

Estoy intentando realizar una aplicacion con ADF y JDeveloper, me gustaria saber si de casualidad tienen un tutorial donde expliquen como hacer el login usando ADF y JDeveloper con consulta en una base de datos, y que despues del que el usuario se autentique se pueda crear un objeto con la informacion referente al usuario de tal forma que en paginas posteriores se pueda mostrar informacion solo de ese tipo de usuario e informacion de este usuario tiene relacionada en la BD, y la forma de usar viewCriteria con estos parametros