ADF para principiantes veteranos de forms ADF, el controlador
Jan 17

El controlador y la vista, jdeveloper los coloca juntos. No sé por qué.
En fin, no vengo del mundo java y hay muchas cosas que se me escapan.
Para la vista, con Struts 1.1, tenemos dos opciones en cuanto a páginas dinámicas. Por un lado tenemos jsp y por otro uix.

El controlador y la vista, jdeveloper los coloca juntos. No sé por qué.
En fin, no vengo del mundo java y hay muchas cosas que se me escapan.
Para la vista, con Struts 1.1, tenemos dos opciones en cuanto a páginas dinámicas. Por un lado tenemos jsp y por otro uix.
En jsp las páginas se construyen utilizando html, etiquetas de jsp y lenguaje de expresión (EL en adelante). El EL permite “hacer llamadas” al modelo. Iterar sobre los datos de una tabla envuelta. Obtener un valor de un campo. Un ejemplo de página jsp que utilice ADF BC puede ser este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ page contentType="text/html;charset=windows-1252"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>untitled</title>
</head>
<body>
  <html:errors/>
  <html:form action="/MntoDto2.do">
    <input type="hidden" name="<c:out value='${bindings.statetokenid}'/>" value="<c:out value='${bindings.statetoken}'/>"/>
    <table border="0" width="100%" cellpadding="2" cellspacing="0">
      <tr>
        <td>
          <c:out value="${bindings['Deptno'].label}"/>
        </td>
        <td>
          <html:text property="Deptno"/>
        </td>
      </tr>
      <tr>
        <td>
          <c:out value="${bindings['Dname'].label}"/>
        </td>
        <td>
          <html:text property="Dname"/>
        </td>
      </tr>
      <tr>
        <td>
          <c:out value="${bindings['Loc'].label}"/>
        </td>
        <td>
          <html:text property="Loc"/>
        </td>
      </tr>
    </table>
    <br/>
    <c:out value="${bindings.editingMode}"/>
    <br/>
    <br/>
    <input name="event_Submit" type="submit" value="Submit"/>
    <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td>
          <input type="submit" name="event_First" value="First" <c:out value="${bindings.First.enabledString}"/>/>
        </td>
        <td>
          <input type="submit" name="event_Previous" value="Previous" <c:out value="${bindings.Previous.enabledString}"/>/>
        </td>
        <td>
          <input type="submit" name="event_Next" value="Next" <c:out value="${bindings.Next.enabledString}"/>/>
        </td>
        <td>
          <input type="submit" name="event_Last" value="Last" <c:out value="${bindings.Last.enabledString}"/>/>
        </td>
      </tr>
    </table>
    <input type="submit" name="event_Commit" value="Commit" <c:out value="${bindings.Commit.enabledString}" />/>
    <input type="submit" name="event_Rollback" value="Rollback" <c:out value="${bindings.Rollback.enabledString}" />/>
  </html:form>
</body>
</html>

Así, por ejemplo, la expresión ${bindings['Deptno'].label} viene a significar tráeme la etiqueta que he definido para el campo deptno.

Una página en uix es un xml con un estructura determinada. A primera vista y por lo que llevo investigado, el diseño en un uix parece estar muy restringido y ser muy limitado. Quiero pensar que es sólo inexperiencia. Cuando le piden al servidor un uix, él genera un código html con una hoja de estilos en función del navegador y el sistema operativo del visitante. El código html generado es, a falta de un adjetivo peor, asqueroso sin llegar a los típicos de microsoft.
Sin embargo tiene una gran ventaja. Los componentes que se ven están cargados de funcionalidad por defecto sin que para ello haya que programar. Por ejemplo, todos los campos de entrada obligatorios tendrán un asterisco a la izquierda, los campos de entrada de tipo fecha se mostrarán con un icono a la derecha para elegir la fecha de un calendario, en tablas multiregistro el paginado es automático, las cabeceras en tablas multiregistro ordenan por columna al hacer doble click… una pasada vamos.
Este sería el ejemplo de una página en uix:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?xml version="1.0" encoding="windows-1252"?>
<page xmlns="http://xmlns.oracle.com/uix/controller"
      xmlns:ui="http://xmlns.oracle.com/uix/ui"
      xmlns:ctrl="http://xmlns.oracle.com/uix/controller"
      xmlns:html="http://www.w3.org/TR/REC-html40"
      expressionLanguage="el">
  <content>
    <dataScope xmlns="http://xmlns.oracle.com/uix/ui">
      <provider>
        <!-- Add DataProviders (<data> elements) here -->
      </provider>
 
      <contents>
        <document>
          <metaContainer>
            <!-- Set the page title -->
            <head title=""/>
          </metaContainer>
          <contents>
            <body>
              <contents>
                <form name="form0">
                  <contents>
                    <formValue name="${bindings.statetokenid}" value="${bindings.statetoken}" id="_uixState"/>
                    <flowLayout>
                      <contents>
                        <messageBox model="${data}"/>
                        <labeledFieldLayout>
                          <contents>
                            <messageTextInput model="${bindings.Deptno}" columns="10">
                              <onSubmitValidater>
                                <decimal/>
                              </onSubmitValidater>
                            </messageTextInput>
                            <messageTextInput model="${bindings.Dname}" columns="10"/>
                            <messageTextInput model="${bindings.Loc}" columns="10"/>
                          </contents>
                        </labeledFieldLayout>
                        <pageButtonBar>
                          <contents>
                            <submitButton text="Submit"/>
                            <submitButton text="First" model="${bindings.First}" id="First0" event="action"/>
                            <submitButton text="Previous" model="${bindings.Previous}" id="Previous1" event="action"/>
                            <submitButton text="Next" model="${bindings.Next}" id="Next2" event="action"/>
                            <submitButton text="Last" model="${bindings.Last}" id="Last3" event="action"/>
                            <submitButton text="Commit" model="${bindings.Commit}" id="Commit4" event="action"/>
                            <submitButton text="Rollback" model="${bindings.Rollback}" id="Rollback5" event="action"/>
                          </contents>
                        </pageButtonBar>
                      </contents>
                    </flowLayout>
                  </contents>
                </form>
              </contents>
            </body>
          </contents>
        </document>
      </contents>
    </dataScope>
  </content>
 
  <handlers>
    <!-- Add EventHandlers (<event> elements) here  -->
    <event name="action" source="First0">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.First}"/>
    </event>
    <event name="action" source="Previous1">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Previous}"/>
    </event>
    <event name="action" source="Next2">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Next}"/>
    </event>
    <event name="action" source="Last3">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Last}"/>
    </event>
    <event name="action" source="Commit4">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Commit}"/>
    </event>
    <event name="action" source="Rollback5">
      <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Rollback}"/>
    </event>
  </handlers>
 
</page>
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution 3.0 License.

Comments are closed.