cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pierre Martins <pierre.mart...@symeria.com>
Subject Construction de form dynamiques
Date Tue, 15 Mar 2005 22:43:18 GMT
Bonjour à tous,

Je souhaite construire une forme dynamiquement en fonction de ce qu'un 
utilisateur peu avoir sélectionné dans une combo box par exemple.

*Scénario*
Typiquement prenons le scénario du remplissage d'une forme pour la 
registration d'un utilisateur :

Lorsque l'utilisateur aura choisi son pays d'origine, la page va se 
rafraîchir, la forme restera la même mais de nouveau champs vont 
apparaître pour prendre en compte la spécificité des adresses françaises 
par rapport à d'autre pays.

*But*
Je souhaite implementer ce type de fonctionnalités avec un minimum de 
flow script supplémentaire.

*Methode*
Pour cela J'utilise des Xinclude dans mon fichier 'fd' (forme 
définition) et 'fi'.
En fait les Xinclude me permettent en fonction des variables de request 
d'aller chercher les 'bout' de fichier manquant.

*Problème*
Mon problème est que cela ne fonctionne pas car il semble que lorsque la 
page est rafraîchie par l'utilisation d'un <fi:styling 
submit-on-change="true"/> (dans une combo par exemple), le fichier 'fi' 
est bien rafraîchie mais pas le la forme définition 'fd'.
Cela rend donc inutile l'utilisation du XInclude dans le fichier 'fd'.

*Comment résoudre ce problème ?*
J'ai essaye de mettre directement toutes les définitions de champs dans 
le même fichier 'fd' mais cela ne fonctionne pas. (voir commentaires 
après exemple)


Example de fichier 'fi'

<?xml version="1.0" encoding="UTF-8"?>
<div xmlns:ft="http://apache.org/cocoon/forms/1.0#template" 
xmlns:cinclude="http://apache.org/cocoon/include/1.0" 
xmlns:xi="http://www.w3.org/2001/XInclude" 
xmlns:fi="http://apache.org/cocoon/forms/1.0#instance">
  <center>
  Créer une nouvelle alerte<br/>
  </center>
  <ft:form-template action="#{$continuation/id}.continue" method="POST">
    <fi:group>
      <fi:label>Création d'une alert</fi:label>
      <fi:styling type="fieldset" layout="columns"/>
      <fi:items>
        <ft:widget-label id="type"/>
        <ft:widget id="type">
          <fi:styling submit-on-change="true"/>
          <fi:styling list-type="list"/>
        </ft:widget>
      </fi:items>
    </fi:group>
    <br/>
    <xi:include 
href="cocoon:/processRule?xquery=resources/rules/xquery/getAlertFormDisplayCocoonURI.xq&amp;formatRuleResult=resources/rules/xslt/getAlertFormDisplayCocoonURI.xsl#xpointer(/*/*)"/>
  </ft:form-template>
</div>


Exemple de fichier 'fd' correspondant

<?xml version="1.0" encoding="UTF-8"?>

<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" 
xmlns:xi="http://www.w3.org/2001/XInclude" 
xmlns:cinclude="http://apache.org/cocoon/include/1.0">
  <fd:widgets>

    <fd:field id="type" required="true">
      <fd:label>Type :</fd:label>
      <fd:datatype base="string"/>
      <xi:include 
href="cocoon:/processRule?xquery=resources/rules/xquery/getAlertAvailableAlertType.xq&amp;formatRuleResult=resources/rules/xslt/getAlertAvailableAlertType.xsl"/>
    </fd:field>
  
    <xi:include 
href="cocoon:/processRule?xquery=resources/rules/xquery/getAlertFormDefinitionCocoonURI.xq&amp;formatRuleResult=resources/rules/xslt/getAlertFormDefinitionCocoonURI.xsl#xpointer(/*/*/*)"/>

    <fd:submit id="valid" action-command="submit">
      <fd:label>Valider</fd:label>
    </fd:submit>

    <fd:submit id="cancel" action-command="clean">
      <fd:label>Annuler</fd:label>
    </fd:submit>
  
  </fd:widgets>

</fd:form>

Typiquement le second Xinclude devrait, en fonction des variables de 
request, être remplacé par :

    <fd:field id="quantity" required="true">
      <fd:label>Seuil :</fd:label>
      <fd:datatype base="string"/>
    </fd:field>
Ou
    <fd:field id="origine" required="true">
      <fd:label>Lieu :</fd:label>
      <fd:datatype base="string"/>
    </fd:field>

Comme vous pouvez le constaté, dans mon scénario, si l'on se retrouve à 
devoir entrer 'Origine', ce champ est obligatoire. En revanche on doit 
entrer la 'Quatity', la quantity devient obligatoire.
Pour cette raison je ne peux pas mettre les deux dans un même fichier 'fd'.
Si je fais ainsi, comme il n'y aura qu'un seul des deux champ renseigné 
(puisque seul visible dans l'explorer), la page va boucler car il 
manquera toujours un champs obligatoire.


J'espère que mes explications auront été assez claires.
La problématique est assez complexe à exposer.

Merci d'avance pour vos suggestions,
Pierre

-- 
______________________
Pierre Martins
Mail: pierre.martins@symeria.com
Symeria (Consulting, Workflow,traceability, quality)
http://www.symeria.com 


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message