Salut

Je suis en train de travailler sur une application à partir de Jboss Seam et j'ai créé des formulaires dynamiques dans des modals panels pour ne pas à avoir à recharger la page complète à chaque action.

Lorsque je fais un "enregistrer" soit un persist de mon objet, à la seconde ouverture de mon modal panel mon formulaire est bien vide, mais si je fais un "annuler" en ayant renseigné certains champs ces derniers ne sont pas réinitialisé à la seconde ouverture.

Ceci malgré l'appel de la fonction clearInstance(). J'ai aussi essayé de forcer de réinitialiser les inputs en parcourant les inputs du formulaire mais la fonction bloque .

Une idée ?

Le bean:
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
43
44
45
46
47
48
 
@Name("myEntityHome")
public class MyEntityHome extends EntityHome<MyEntity> {
 
	@In(create = true)
	MySubEntityHome mySubEntityHome;
 
...
 
	public MySubEntityHome getMySubEntityHome (){
		return mySubEntityHome ;
	}
 
        public String clearInstanceMySubEntityHome(){
 
		mySubEntityHome.clearInstance();
		clearSubmittedValues("form");
		return "cleared";
	}
 
 
	public void clearSubmittedValues(String formName) {
 
		UIViewRoot view = getFacesContext().getViewRoot();
		UIComponent uiComponent = view.findComponent(formName);
		clearSubmittedValues(uiComponent);
	}
 
	public void clearSubmittedValues(UIComponent uiComponent) {
 
	        if (uiComponent == null) {
	            return;
	        }
 
	        Iterator<UIComponent> children = (uiComponent).getFacetsAndChildren();
 
	        while (children.hasNext()) {
	            clearSubmittedValues(children.next());
	        }
	        if (uiComponent instanceof UIInput) {
	            ((UIInput) uiComponent).setSubmittedValue(null);
	            ((UIInput) uiComponent).setValue(null);
	            ((UIInput) uiComponent).setLocalValueSet(false);
	            ((UIInput) uiComponent).resetValue();
	        }        
	}
 
}

la jsf:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
 
 
			<a4j:commandLink styleClass="popup"
                		value="Ajouter" 
        			ajaxSingle="true"
        			action="#{MyEntityHome.clearInstanceMySubEntityHome}"
        							onclick="Richfaces.showModalPanel('modalPanel')">
        			<a4j:support event="oncomplete" ajaxSingle="true" reRender="formRefrech"/> 
    			</a4j:commandLink>
 
...
 
<rich:modalPanel  id="modalPanel" autosized="true" >
 
	<a4j:outputPanel id="formRefresh">
    <h:form id="form" styleClass="edit" >
 
            <s:decorate id="myNameField" template="layout/edit.xhtml">
                <ui:define name="label">Name</ui:define>
                <h:inputText id="myName"
                       required="true"
                           size="45"
                          value="#{myEntityHome.mySubEntityHome.instance.myName}">
                    <a:support event="onblur" reRender="myNameField" bypassUpdates="true" ajaxSingle="true"/>
                </h:inputText>
            </s:decorate>
 
            <div style="clear:both">
                <span class="required">*</span>
                Champs requis
            </div>
 
        <div class="actionButtons">    
 
			<a4j:commandButton
				value="Enregistrer"
    				action="#{myEntityHome.mySubEntityHome.persist}"
				onclick="Richfaces.hideModalPanel('modalPanel')"> 
			</a4j:commandButton>
 
			<a4j:commandButton
				value="Annuler"
    				action="#{myEntityHome.mySubEntityHome.clearInstance}"
    				<!-- ou cette action pour forcer le clean des inputs
    				action="#{myEntityHome.clearInstanceMySubEntityHome}"
    				-->
    				immediate="true"
				onclick="Richfaces.hideModalPanel('modalPanel')">  
			</a4j:commandButton>
 
 
        </div>
    </h:form>
    </a4j:outputPanel>	
	</rich:modalPanel>