Problème pour réinitialiser les inputs d'un formulaire
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 :D?
Le bean:
Code:
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:
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> |