Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2003, 12h34   #1
Nouveau Membre du Club
 
Inscription : août 2002
Messages : 130
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 130
Points : 25
Points : 25
Par défaut formulaire choix multiple

Bonjour,

Comment peut on récupérer dans un xmlService les champs issus d'une liste déroulante à choix multiples d'un formulaire

Merci d'avance
pram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2003, 16h33   #2
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
c'est pas possible avec ce type la.
utilise plutot checkbox.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2003, 17h48   #3
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
Par défaut <select> multiple

La réponse courte :
pas possible, il faut utiliser la technique avancée du pivot.

La réponse longue :

Le Framework XMLCLX ne supporte pas le passage de multiples paramètres HTTP portant le mêmes noms.

Voici la raison :

En exemple, le code html utilisé :

Code :
1
2
3
4
5
 <select name="test" mode="multiple">
  <option value="1">...</option>
  <option value="2">...</option>
  <option value="3">...</option>
</select>
Si l'utilisateur sélectionne l'option 1 et 2, la requete HTTP (en GET ici pour une meilleure compréhension) serait :
Lorsque le Framework dispatch la requete, il interprète les paramètres et les placent dans le Context, en fonction du nom.
Il placera donc le champ test avec la valeur 1 une permiere fois dans le Context. Puis il placera le champ test avec la valeur 2 dans le Context.
Le probleme... C'est que le Context est un tableau hashé qui ne supporte pas 2 champs portant le meme nom... La deuxième valeur écrase donc la première.

Pour s'en sortir, il faut laisser tomber le <SELECT> mode multiple inutilisable et utiliser la technique du Pivot avec une liste de checkbox.

Pour cela, vous construiser votre formulaire comme suit :

Code :
1
2
3
4
5
6
7
8
9
 
<form name="..." action="..." post="...">
  <input type="hidden" name="XMLC_Pivot" value="OPTION" />
  ...
  <xsl:for-each select="Item">
      <input type="checkbox" name="OPTION[{position()}].ITEM_ID" value="{ITEM_ID} />
    <xsl:value-of select="ITEM_NAME" />
  <xsl:for-each>
</form>
Le XMLC_Pivot indique le champ à pivoter. Le nom est à votre guise. Généralement, c'est le node-name sur lequel on travaille (publisher, ORG ou ce que vous voulez).

Le xsl:for-each peut bien sûr etre remplacé par des templates match. Il permet de matcher sur tous les éléments que vous voulez voir apparaitre dans votre liste. Si vous n'avez pas cette liste dans le XML, à vous de la construire directement en placant correctement les <input type="checkbox">

Ensuite chaque champ porte un nom différent. Dans l'exemple, après construction par le for-each, le premier Item créera un <input type="checkbox" name="OPTION[1].ITEM_ID" value="1001" />

Lorsque vous validerez cette requete, le Framework construira un InputDoc avant l'éxécution du XMLService, qui contiendra la structure suivante :

Code :
1
2
3
4
5
6
7
 
<Context>
  <OPTION>
    <ITEM_ID>1001</ITEM_ID>
  <OPTION>
  ...
</Context>
Vous pourrez y accéder par code, dans le BeforeXMLGRAM ou bien utiliser l'instruction Match dans le XMLGram directement, pour décrire un traitement s'éxécutant pour chaque OPTION. (Voir http://www.xmlrad.com/Manual/Appendix13/index.htm sur le XMLGRAM pour plus d'infos sur match)

Voila !
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2003, 09h32   #4
Nouveau Membre du Club
 
Inscription : août 2002
Messages : 130
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 130
Points : 25
Points : 25
OK. Mais j'avais opté pour une combo pour un soucis de place. Avec l'attribut size=1 cela s'intégrait très facilement dans ma page (en fait la combo est utilisé ici pour filtrer les lignes d'une table). Une checkbox m'oblige à modifier l'architecture de ma page ou alors à afficher cette checkbox dans une fenetre popup(?) (les contraintes sont plus importantes : javascript (obligatoire?),xmlservice supplémentaire, moins pratique et moins joli...).
pram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2003, 15h16   #5
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
Par défaut interface

Pour une interface coquette, il serait possible de placer les checkbox dans un div, et d'utiliser du javascript/css pour l'afficher ou pas, avec ou sans scrollbar, etc...

Il serait possible de recréer l'equivalent d'un <select> avec cette technique, mais effectivement, ca necessiterait un peu de html avancé...

La popup n'est généralement pas conseillée, parce qu'on a toutes les chances de retrouver 50 fenetres IE ouvertes sur le bureau des utilisateurs. Les popups sont rarement la bonne solution...
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2003, 18h28   #6
Membre régulier
 
Inscription : janvier 2003
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 85
Points : 92
Points : 92
Si tu tiens absolument à utiliser une combobox en mode multiple, il te faudra parcourir le Context à la main. En effet, les valeurs sélectionnées dans ta combobox seront de cette forme :

test=1
test=4

Le Context ne permet pas, comme le dit Nicolas, de stocker plusieurs valeurs pour un champ portant le même nom. Ce sera à toi de parcourir tout le tableau du Context en testant le nom du champ :

Code :
1
2
3
4
5
6
7
8
for I := 0 to Context.Count-1 do
begin
  FieldName := Context.GetName(I);
  if FieldName = 'test' then
  begin
    ...
  end;
end;
Voilàx !

A+
__________________
Julien C.
Julien C. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2003, 18h59   #7
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
nop, comme le context est haché, le nom va donner la meme clé et donc va écraser la valeur précédente., il n'y a pas moyen de retrouver les anciennes valeurs portant le meme nom dans le Context.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h02.


 
 
 
 
Partenaires

Hébergement Web