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>
Partager