Bonjour,

mon problème du jour concerne les tabulations : actuellement, j'ai une fenêtre modale (f:subview) qui s'ouvre à l'action d'une commande sur la fenêtre principale. A l'intérieur de cette modale, il y a un formulaire avec plusieurs champs éditables. L'utilisateur peut passer de l'un à l'autre successivement à l'aide des tabulations (un fonctionnement classique en somme).

J'avais déjà remarqué lorsque cette modale était affichée que lorsque l'on "tabulait" au-delà des premier / dernier éléments "tabulables" - pardonne-moi Voltaire!- , le focus passait à des éléments de la fenêtre principale (principalement des éléments de l'interface du navigateur me semblait il).
Dans tous les cas, ça ne me posait guère de problème (à part le fait qu'il fallait tabuler 4-5 fois dans le vide avant de retrouver le focus sur le premier élément).

Cependant, je viens de tester mon application sous Mac Os, et c'est là que le bât blesse... les mêmes tabulations, aussitôt que le focus passe sur un élément de la fenêtre en arrière-plan, réinitialisent tous les champs de ma modale (et comme il y en a beaucoup à remplir, c'est particulièrement pénible quand ça se produit).

Donc je suis tenté de penser que la bonne solution serait de circonscrire les tabulations à l'intérieur seul de ma modale, afin d'éviter ces effets de bord.
Mais je n'ai honnêtement pas la moindre idée si une telle chose est faisable (et a fortiori encore moins sur le comment). Donc si quelqu'un a une idée.

Alternativement, si vous avez une idée sur une façon d'éviter que les champs soient réinitialisés?

Qqs bouts de code :

La modale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
<f:subview 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:t="http://myfaces.apache.org/tomahawk"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    contentType="text/html">
 
    <div id="modal-wrapper">
        <div>
            <h2>
                <h:outputText value="#{bundle.title}"/>
            </h2>
        </div>
        <div class="modal-content">
            <h:form class="modal-css">
                <a4j:outputPanel ajaxRendered="true">
                    <h:inputHidden value="#{MonBean.currentItem}"/>
                    <fieldset>
                            <h:inputText id="1" 
                              ...
                            </h:inputText>
 
                            <h:inputText id="2" 
                              ...
                            </h:inputText>
                           <!--  ... et plein d'autres -->
                    <div class="button-wrapper">
                        <a4j:commandLink action="#{monBean.doUpdateBean}" reRender="tablePrincipale"
                        				 oncomplete="if ('#{monBean.status}' == 'succeed') {#{rich:component('MaModale')}.hide();}">
                            <span>
                                <h:outputText value="#{bundle.validateLabel}"/>
                            </span>
                        </a4j:commandLink>
                    </div>
                </a4j:outputPanel>
            </h:form>
        </div>
    </div>
</f:subview>

La page principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<f:view .... >
 
        ...
 
  <rich:modalPanel
            id="maModale"
            autosized="true"
            width="450">
            <f:facet name="header">
                <h:outputText value="#{bundle.title}" />
            </f:facet>
            <ui:include src="maModale.xhtml" />
        </rich:modalPanel>      
 
        ...
 
</f:view>

Je ne mets pas le bean (qui fonctionne parfaitement par ailleurs), mais je précise toutefois qu'il est en scope request. Il est probable que le problème ne se poserait pas en session, mais ce n'est pas une solution envisageable ici.

Merci de m'avoir lu jusque là, et merci d'avance de vos suggestions le cas échéant.