Skip to content

2. Ejemplos de este documento

Me gustaría hacer de esto un artículo corto. Las interacciones entre un IA y un usuario se presentan en el artículo [Generar un script Python con herramientas de IAque ahora llamaré [ref1]. Interacciones con Gemini y ChatGPT sólo se presentarán al margen. En cualquier caso, era imposible presentar todos iteraciones.

A continuación daré algunos ejemplos de las particularidades de mis ODT / documentos DOCX que el Gemini / ChatGPT gestiona correctamente. Es este documento el que propondremos para la conversión HTML a script de Gemini ChatGPT. Veremos qué hace con él.

2.1. Las listas

El Gemini / ChatGPT sabe gestionar listas numeradas y con viñetas aunque estén entrelazados :

2.1.1. Listas

  • Tema 1;
  • Tema 2:
  • Tema 3;
    • Elemento 3.1;
      • Elemento 3.1.1
      • Elemento 3.1.2
        • Elemento 3.1.2.1
        • Elemento 3.1.2.2
    • Elemento 3.2;
  • Tema 4;

2.1.2. Listas numeradas

  1. Tema 1;
  1. Tema 2;
    1. Elemento 2.1
      1. Elemento 2.1.1
        1. Elemento 2.1.1.1
        2. Elemento 2.1.1.2
      2. Elemento 2.1.2
    2. Elemento 2.2
  2. Tema 3;

2.1.3. Listas mixtas 1

  • Tema 1;
  • Tema 2:
  • Tema 3;
    • Elemento 3.1;
      1. Elemento 3.1.1
      2. Elemento 3.1.2
        • Elemento 3.1.2.1
        • Elemento 3.1.2.2
    • Elemento 3.2;
  • Tema 4;

2.1.4. Listas mixtas 2

  1. Tema 1;
  2. Tema 2;
    1. Elemento 2.1
      1. Elemento 2.1.1
        • Elemento 2.1.1.1
        • Elemento 2.1.1.2
      2. Elemento 2.1.2
    2. Elemento 2.2
  3. Tema 3;

2.1.5. Listas numeradas manualmente

Numeración manual significa ici que el usuario establece el número de un párrafo numerado: [clic derecho sobre el párrafo numerado / párrafo / párrafo / reiniciar numeración / empezar por].

Empiezo una lista con un número distinto de 1.

  1. Elemento 6
  2. elemento 7

Ici Rompo la lista para decir algo, pero luego quiero seguir numerando.

  1. Elemento 8
  2. elemento 9

Luego empiezo una nueva lista numerada:

  1. elemento 11
  2. elemento 12

2.2. Bloques de códigos

Mis cursos contienen muchos bloques de código. A menudo se trata de códigos enriquecidos (negrita, colores de las palabras clave) por IDE (Eclipse, PyCharm, WebStorm, Netbeans). Estos códigos enriquecidos son reproducidos de forma idéntica por el conversor.

Cuando el código no está enriquecido (código del Bloc de notas o ...), ele Convertidor Gemini / ChatGPT lo reconoce (Java, C#, XML, HTML, ...) utilizando palabras clave de idioma en un archivo de configuración. Cuando reconoce un idioma, inserta un marcador (valla) para MkDocs de modo quee éste adapta el resaltado sintáctico del código al lenguaje utilizado en el bloque de código.

2.2.1. Bloques de código enriquecidos (Eclipse, Visual Studio, etc.)

He aquí algunos bloques de código enriquecidos con diferentes IDE :

Java


package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {

    @SuppressWarnings({ "unchecked", "resource" })
    public static void main(String[] args) {
        // recuperación del contexto de Spring
        ApplicationContext ctx = new ClassPathXmlApplicationContext("config-01.xml");
        // recuperamos las judías
        Personne p01 = ctx.getBean("personne_01", Personne.class);
        Personne p02 = ctx.getBean("personne_02", Personne.class);
        List<Personne> club = ctx.getBean("club", new ArrayList<Personne>().getClass());
        Appartement appart01 = ctx.getBean(Appartement.class);
...

C#


using System;

namespace Chap1 {
    class Impots {
        static void Main(string[] args) {
            // tablas de datos necesarios para calcular el impuesto
            decimal[] limites = { 4962M, 8382M, 14753M, 23888M, 38868M, 47932M, 0M };
            decimal[] coeffR = { 0M, 0.068M, 0.191M, 0.283M, 0.374M, 0.426M, 0.481M };
            decimal[] coeffN = { 0M, 291.09M, 1322.92M, 2668.39M, 4846.98M, 6883.66M, 9505.54M };

            // se restablece el estado civil
            bool OK = false;
            string reponse = null;
            while (!OK) {
                Console.Write("Etes-vous marié(e) (O/N) ? ");
                reponse = Console.ReadLine().Trim().ToLower();
                if (reponse != "o" && reponse != "n")
                    Console.Error.WriteLine("Réponse incorrecte. Recommencez");
                else OK = true;
            }//mientras que
            bool marie = reponse == "o";
...

Python


# ----------------------------------
def affiche(chaine):
    # cartel cadena
    print("chaine=%s" % chaine)


# ----------------------------------
def affiche_type(variable):
    # muestra el tipo de variable
    print("type[%s]=%s" % (variable, type(variable)))


# ----------------------------------
def f1(param):
    # añade 10 a param
    return param + 10


# ----------------------------------
def f2():
    # devuelve una tupla de 3 valores
    return "un", 0, 100


# -------------------------------- programa principal ------------------------------------
...

PHP


<?php

// tipos estrictos para los parámetros de las funciones
declare(strict_types=1);

// constantes globales
define("PLAFOND_QF_DEMI_PART", 1551);
define("PLAFOND_REVENUS_CELIBATAIRE_POUR_REDUCTION", 21037);
define("PLAFOND_REVENUS_COUPLE_POUR_REDUCTION", 42074);
define("VALEUR_REDUC_DEMI_PART", 3797);
define("PLAFOND_DECOTE_CELIBATAIRE", 1196);
define("PLAFOND_DECOTE_COUPLE", 1970);
define("PLAFOND_IMPOT_COUPLE_POUR_DECOTE", 2627);
define("PLAFOND_IMPOT_CELIBATAIRE_POUR_DECOTE", 1595);
define("ABATTEMENT_DIXPOURCENT_MAX", 12502);
define("ABATTEMENT_DIXPOURCENT_MIN", 437);

// definición de constantes locales
$DATA = "taxpayersdata.txt";
$RESULTATS = "resultats.txt";
$limites = array(9964, 27519, 73779, 156244, 0);
$coeffR = array(0, 0.14, 0.3, 0.41, 0.45);
$coeffN = array(0, 1394.96, 5798, 13913.69, 20163.45);

// datos de lectura
$data = fopen($DATA, "r");
if (!$data) {
  print "Impossible d'ouvrir en lecture le fichier des données [$DATA]\n";
  exit;
}

...

ECMAScript


'use strict';
// este es un comentario
// constante
const nom = "dupont";
// una pantalla de visualización
console.log("nom : ", nom);
// una matriz con elementos de distintos tipos
const tableau = ["un", "deux", 3, 4];
// su número de elementos
let n = tableau.length;
// un bucle
for (let i = 0; i < n; i++) {
  console.log("tableau[", i, "] = ", tableau[i]);
}
// inicializar 2 variables con el contenido de un array
let [chaine1, chaine2] = ["chaine1", "chaine2"];
// concatenación de las 2 cadenas
const chaine3 = chaine1 + chaine2;
// visualización de resultados
console.log([chaine1, chaine2, chaine3]);
...

VBScript


' cálculo de la deuda tributaria del contribuyente
' el programa debe llamarse con tres parámetros: salario de los hijos casados
' casado: carácter Y si está casado, N si no lo está
' hijos: número de hijos
' salario: salario anual sin céntimos

' declaración obligatoria de variables
  Option Explicit
  Dim erreur
  
' recuperar los argumentos y comprobar su validez
  Dim marie, enfants, salaire
  erreur=getArguments(marie,enfants,salaire)
  ' ¿Error?
  If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit erreur(0)

' recuperamos los datos necesarios para calcular los impuestos
  Dim limites, coeffR, coeffN
  erreur=getData(limites,coeffR,coeffN)
  ' ¿Error?
  If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit 5

  ' se muestra el resultado
  wscript.echo "impôt=" & calculerImpot(marie,enfants,salaire,limites,coeffR,coeffN)
  
  ' salimos sin error
  wscript.quit 0

XML


<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects" />
    </context>
    <objects xmlns="http://www.springframework.net">
      <object name="dao" type="Dao.DataBaseImpot, ImpotsV7-dao">
        <constructor-arg index="0" value="MySql.Data.MySqlClient"/>
        <constructor-arg index="1" value="Server=localhost;Database=bdimpots;Uid=admimpots;Pwd=mdpimpots;"/>
        <constructor-arg index="2" value="select limite, coeffr, coeffn from tranches"/>
      </object>
      <object name="metier" type="Metier.ImpotMetier, ImpotsV7-metier">
        <constructor-arg index="0" ref="dao"/>
      </object>
    </objects>
  </spring>
</configuration>

2.2.2. Bloques de códigos bruto (plain text)

He aquí algunos ejemplos de código bruto :

Resultados

Observe que el código no empieza por la línea 1.

C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\venv\Scripts\python.exe C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/bases/bases_01.py
nom=dupont
liste[0]=un
liste[1]=deux
liste[2]=3
liste[3]=4
[chaine1,chaine2,chaine1chaine2]
chaine=chaine1
type[4]=<class 'int'>
type[chaine1]=<class 'str'>
type[['un', 'deux', 3, 4]]=<class 'list'>
type[a changé]=<class 'str'>
res1=14s
(res1,res2,res3)=[un,0,100]
liste[0]=un
liste[1]=0
liste[2]=100
liste[0]=8
liste[1]=5
somme=13

Process finished with exit code 0

Este caso requirió docenas de iteraciones. El conversor nunca encontraba el número de la primera línea de código. Finalmente le pregunté a Gemini cómo formatear el bloque de código para que lo reconociera. Esto es lo que me dijo

Image

He seguido este procedimiento y ha funcionado. Utilicé el método a través del icono de la lista (Personalizar). Así que puede que tenga que modificar ciertos elementos del Documento ODT / DOCX para obtener lo que desea.

El conversor puede manejar bloques de código sin numerar.

liste[0]=un
liste[1]=0
liste[2]=100
liste[0]=8
liste[1]=5
somme=13

He aquí los mismos ejemplos que en el párrafo 2.2.1 pero no enriquecido. Por tanto, son las palabras clave del archivo de configuración las que guiarán al conversor hacia el idioma adecuado.

Java

package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {

@SuppressWarnings({ "unchecked", "resource" })
public static void main(String[] args) {
// recuperación del contexto de Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("config-01.xml");
// recuperamos las judías
Personne p01 = ctx.getBean("personne_01", Personne.class);
Personne p02 = ctx.getBean("personne_02", Personne.class);
List<Personne> club = ctx.getBean("club", new ArrayList<Personne>().getClass());
Appartement appart01 = ctx.getBean(Appartement.class);
...

C#

using System;

namespace Chap1 {
    class Impots {
        static void Main(string[] args) {
            // tablas de datos necesarios para calcular el impuesto
            decimal[] limites = { 4962M, 8382M, 14753M, 23888M, 38868M, 47932M, 0M };
            decimal[] coeffR = { 0M, 0.068M, 0.191M, 0.283M, 0.374M, 0.426M, 0.481M };
            decimal[] coeffN = { 0M, 291.09M, 1322.92M, 2668.39M, 4846.98M, 6883.66M, 9505.54M };

            // se restablece el estado civil
            bool OK = false;
            string reponse = null;
            while (!OK) {
                Console.Write("Etes-vous marié(e) (O/N) ? ");
                reponse = Console.ReadLine().Trim().ToLower();
                if (reponse != "o" && reponse != "n")
                    Console.Error.WriteLine("Réponse incorrecte. Recommencez");
                else OK = true;
            }//mientras que
            bool marie = reponse == "o";
...

Python

# ----------------------------------
def affiche(chaine):
    # cartel cadena
    print("chaine=%s" % chaine)


# ----------------------------------
def affiche_type(variable):
    # muestra el tipo de variable
    print("type[%s]=%s" % (variable, type(variable)))


# ----------------------------------
def f1(param):
    # añade 10 a param
    return param + 10


# ----------------------------------
def f2():
    # devuelve una tupla de 3 valores
    return "un", 0, 100


# -------------------------------- programa principal ------------------------------------
...

PHP

<?php

// tipos estrictos para los parámetros de las funciones
declare(strict_types=1);

// constantes globales
define("PLAFOND_QF_DEMI_PART", 1551);
define("PLAFOND_REVENUS_CELIBATAIRE_POUR_REDUCTION", 21037);
define("PLAFOND_REVENUS_COUPLE_POUR_REDUCTION", 42074);
define("VALEUR_REDUC_DEMI_PART", 3797);
define("PLAFOND_DECOTE_CELIBATAIRE", 1196);
define("PLAFOND_DECOTE_COUPLE", 1970);
define("PLAFOND_IMPOT_COUPLE_POUR_DECOTE", 2627);
define("PLAFOND_IMPOT_CELIBATAIRE_POUR_DECOTE", 1595);
define("ABATTEMENT_DIXPOURCENT_MAX", 12502);
define("ABATTEMENT_DIXPOURCENT_MIN", 437);

// definición de constantes locales
$DATA = "taxpayersdata.txt";
$RESULTATS = "resultats.txt";
$limites = array(9964, 27519, 73779, 156244, 0);
$coeffR = array(0, 0.14, 0.3, 0.41, 0.45);
$coeffN = array(0, 1394.96, 5798, 13913.69, 20163.45);

// datos de lectura
$data = fopen($DATA, "r");
if (!$data) {
  print "Impossible d'ouvrir en lecture le fichier des données [$DATA]\n";
  exit;
}

...

ECMAScript

'use strict';
// este es un comentario
// constante
const nom = "dupont";
// una pantalla de visualización
console.log("nom : ", nom);
// una matriz con elementos de distintos tipos
const tableau = ["un", "deux", 3, 4];
// su número de elementos
let n = tableau.length;
// un bucle
for (let i = 0; i < n; i++) {
  console.log("tableau[", i, "] = ", tableau[i]);
}
// inicializar 2 variables con el contenido de un array
let [chaine1, chaine2] = ["chaine1", "chaine2"];
// concatenación de las 2 cadenas
const chaine3 = chaine1 + chaine2;
// visualización de resultados
console.log([chaine1, chaine2, chaine3]);
...

VBScript

' cálculo de la deuda tributaria del contribuyente
' el programa debe llamarse con tres parámetros: salario de los hijos casados
' casado: carácter Y si está casado, N si no lo está
' hijos: número de hijos
' salario: salario anual sin céntimos

' declaración obligatoria de variables
  Option Explicit
  Dim erreur

' recuperar los argumentos y comprobar su validez
  Dim marie, enfants, salaire
  erreur=getArguments(marie,enfants,salaire)
  ' ¿Error?
  If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit erreur(0)

' recuperamos los datos necesarios para calcular los impuestos
  Dim limites, coeffR, coeffN
  erreur=getData(limites,coeffR,coeffN)
  ' ¿Error?
  If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit 5

  ' se muestra el resultado
  wscript.echo "impôt=" & calculerImpot(marie,enfants,salaire,limites,coeffR,coeffN)

  ' salimos sin error
  wscript.quit 0

XML

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects" />
    </context>
    <objects xmlns="http://www.springframework.net">
      <object name="dao" type="Dao.DataBaseImpot, ImpotsV7-dao">
        <constructor-arg index="0" value="MySql.Data.MySqlClient"/>
        <constructor-arg index="1" value="Server=localhost;Database=bdimpots;Uid=admimpots;Pwd=mdpimpots;"/>
        <constructor-arg index="2" value="select limite, coeffr, coeffn from tranches"/>
      </object>
      <object name="metier" type="Metier.ImpotMetier, ImpotsV7-metier">
        <constructor-arg index="0" ref="dao"/>
      </object>
    </objects>
  </spring>
</configuration>

HTML

<!DOCTYPE HTML>
<HTML>
    <head>
        <title>Laragon</title>

        <link href="<a href="view-source:https://fonts.googleapis.com/css?family=Karla:400">https://fonts.googleapis.com/css?family=Karla:400</a>" rel="stylesheet" type="text/css">

        <style>
            HTML, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                width: 100%;
                display: table;
                font-weight: 100;
                font-family: 'Karla';
            }

            .container {
                text-align: center;
                display: table-cell;
                vertical-align: middle;
            }

            .content {
                text-align: center;
                display: inline-block;
            }

            .title {
                font-size: 96px;
            }

            .opt {
                margin-top: 30px;
            }

            .opt a {
              text-decoration: none;
              font-size: 150%;
            }

            a:hover {
              color: red;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="content">
                <div class="title" title="Laragon">Laragon</div>

                <div class="info"><br />
                      Apache/2.4.35 (Win64) OpenSSL/1.1.0i PHP/7.2.11<br />
                      PHP version: 7.2.11   <span><a title="phpinfo()" href="<a href="view-source:http://localhost/?q=info">/?q=info</a>">info</a></span><br />
                      Document Root: C:/myprograms/laragon-lite/www<br />

                </div>

2.3. Enlaces

El Gemini / ChatGPT sabe cómo mantener los enlaces externos en el Documento ODT / DOCX. Por ejemplo Gemini 3 o [Generar un script Python con herramientas de IA].

Puede gestionar un enlace a un capítulo Enlace a un capítulo

Un referencia cruzada a un capítulo : 2.1.1.

Referencia a un marcador de texto que precede a : Gemini 3

Referencia a un marcador de texto que sigue : GitHub

2.4. Enriquecimiento del texto

El conversor puede manejar negrita, cursiva, subrayado y resaltado. Respeta el color del resalte.

Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.

Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].

Le convertidor gestiona también el color de caracteres.


También gestiona los bordes superior e inferior de los párrafos.



  • También gestiona los bordes superior e inferior de los párrafos.
  • También gestiona los bordes superior e inferior de los párrafos.
  • También gestiona los bordes superior e inferior de los párrafos.

  1. También gestiona los bordes superior e inferior de los párrafos.
  2. También gestiona los bordes superior e inferior de los párrafos.
  3. También gestiona los bordes superior e inferior de los párrafos.
  1. Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.
  2. Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].
  3. Le convertidor gestiona también el color de caracteres.
  • Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.
  • Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].
  • Le convertidor gestiona también el color de caracteres.
También gestiona el fondo del párrafo
  • También gestiona el fondo del párrafo
  1. también gestiona el fondo del párrafo

2.5. A título puede ser también enriquecido.

2.6. Las imágenes

El Gemini / ChatGPT sabe gestionar imágenes y tablas de imágenes :

Image

Los planos son habituales en los documentos ODT. A pesar des docenas de intentos, Gemini no consiguió generar un script que generara la imagen (como una captura de pantalla) del dibujo. Así que arriba, la imagen 5 es una captura de pantalla de un dibujo de un documento ODT.

Puede hacer clic en todas las imágenes para ampliarlas. Si hace clic en la imagen [1-3] anterior, obtendrá la siguiente ampliación:

2.7. Los caracteres que hay que proteger

Una página web MkDocs1 tiene páginas cuyo contenido no es HTML sino MarkDown. Si le Documento ODT / DOCX contiene caracteres que existen en MarkDown, pueden ser interpretados por MkDocs y por lo tanto no ser renderizados como se espera. He aquí dos ejemplos:

El asterisco * significa MarkDown. La siguiente línea puede malinterpretarse:

El impuesto I es igual a 0.15*R - 2072.5*nbParts.

Otro ejemplo es cuando quieres insertar un bloque de código MarkDown en tu documento como este:

# Convertidor de Word/ODT a sitio HTML (MkDocs)


 🔗 **[Ver el sitio de demostración generado](https://stahe.github.io/word-odt-vers-html-janv-2026/)**


 ---

## 📝 Descripción


 El objetivo de este proyecto es poner a disposición del lector un conversor en Python de documentos Word u ODT a un sitio web HTML estático.


 Cuando el documento ODT/DOCX es adecuado, el conversor genera un sitio web HTML mediante **MkDocs** que tiene el aspecto profesional de los sitios web generados por Pandoc.

## 🤖 Contexto de creación

Este conversor ha sido creado íntegramente por la IA **Gemini 3** (con una suscripción pro). Es el resultado de sucesivas iteraciones para gestionar con precisión la estructura de los documentos ODT (OpenDocument Text).

## ✨ Funcionalidades

El script `convert.py` realiza las siguientes acciones:


 * **Conversión de ODT a Markdown**: Analiza el archivo `.odt` (XML) para extraer su estructura.
 * **Gestión de títulos**: Genera automáticamente la tabla de contenidos (TOC) y la navegación lateral.

* **Bloques de código**: Detección automática de lenguajes, coloración sintáctica y **gestión precisa de la numeración de líneas** (atributos `start-value`).
 * **Listas**: Compatibilidad con listas con viñetas y numeradas con la sangría correcta.

* **Formato**: Compatibilidad con *negrita*, *cursiva*, *subrayado* y *resaltado* (respetando los colores originales).
 * **Imágenes**: Extracción e integración automática de las imágenes contenidas en el documento.
 * **Configuración**: Personalización mediante un archivo `config.py` (pie de página, Google Analytics, etc.).


 ## 🚀 Instalación


 ### Requisitos previos


 * Python 3.x
 * Las siguientes bibliotecas:


 ```bash
 pip install odfpy unidecode mkdocs mkdocs-material


 ```

2.8. Los cuadros

Una tabla puede tener diferentes contenidos:

1
2

package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {


    
3
4

# ----------------------------------
def affiche(chaine):
    # cartel cadena
    print("chaine=%s" % chaine)


# ----------------------------------
def affiche_type(variable):
    # muestra el tipo de variable
    print("type[%s]=%s" % (variable, type(variable)))


Una tabla con enlaces :

El Gemini / ChatGPT sabe cómo mantener
enlaces externos en el Documento ODT / DOCX. Por ejemplo
Puede gestionar un enlace a un capítulo Enlace a un capítulo
Un referencia cruzada a un capítulo : 2.1.1.
Referencia a un marcador de texto que precede a : Gemini 3
Referencia a un marcador de texto que sigue : GitHub

Una tabla cuyas celdas contienen otra tabla :

html:form
se utiliza para generar la etiqueta HTML <formulario> y facilitar información al responsable del tratamiento que deberá tramitar este formulario:
action
url donde se enviarán los valores del formulario
name
nombre del formulario HTML. Este es también el nombre del bean que almacenará sus valores
type
nombre de la clase que debe instanciarse para obtener el frijol de almacenamiento de formularios
Observe que no se especifica el método para enviar los parámetros del formulario (GET/POST) al controlador. Esto podría hacerse utilizando el método method. En su defecto, el POST que se utiliza por defecto.
html:text
se utiliza para generar la etiqueta <input type="text" value="..."> :
property
nombre del campo bean del formulario que se asociará a la zona de entrada. Cuando el formulario se envía al servidor (cliente -> servidor), el campo bean tomará el valor del campo de entrada. Cuando se muestre el formulario (servidor -> cliente), el valor contenido en el campo bean se mostrará en el campo convulsión.
También gestiona el fondo del párrafo en una tabla
  • También gestiona el fondo del párrafo en una tabla
  1. también gestiona el fondo del párrafo en una tabla
 

2.9. Notas a pie de página

El convertidor Gemini2 / ChatGPT gestiona las notas a pie de página. He aquí otra nota3 pie de página.



  1. MkDocs 

  2. Google Gemini 

  3. La nota a pie de página