Home / Programmazione / Java / Svuotare un form in JSF
Mattepuffo

Svuotare un form in JSF

Svuotare un form in JSF

Ultimamente mi sono dato allo studio del framework JSF (Java Server Faces).

Un arogmento molto richiesto è come svuotare un form dopo che è stato inviato (e magari anche validato) senza usare redirect o Javascript.

Perchè il fatto è che il comportamento di default prevede che il form non si svuoti se si rimane nella stessa pagina.

Vediamo quindi come fare; prima di tutto abbiamo un form del genere:

      <h:form id="frm_add_lavoro">
            <h:inputText value="#{lb.titolo}" id="titolo">
            </h:inputText><br/>
            <h:inputTextarea value="#{lb.testo}" id="testo">
            </h:inputTextarea>
            <h:commandButton action="#{lb.addLavoro()}" value="Aggiungi lavoro" />
        </h:form>

La cosa importante è specificare un id al form e un id per ogni componente che ci interessa, in modo da poterli richiamare nel nostro ManagedBean.       

A questo punto vediamo il ManagedBean:

@ManagedBean(name = "lb")
@SessionScoped
public class LavoriBean {

    public void addLavoro() {
        // DO STUFF
        FacesContext fc = FacesContext.getCurrentInstance();
        UIViewRoot uiViewRoot = fc.getViewRoot();
        HtmlInputText txtTitolo = (HtmlInputText) uiViewRoot.findComponent("frm_add_lavoro:titolo");
        txtTitolo.setValue("");
        HtmlInputTextarea txtTesto = (HtmlInputTextarea) uiViewRoot.findComponent("frm_add_lavoro:testo");
        txtTesto.setValue("");
    }
}

Ho ovviamente omesso tutto ciò che non serve allo scopo.

Il metodo addLavoro svolgerà alcune operazioni, e poi svuoterà il form.

Per farlo, prima ci identifichiamo il contesto corrente con FacesContext.

Poi usiamo un oggetto UIViewRoot per identificare lo UIComponent principale (dove per UI si intende user interface, e quindi tutta la parte "grafica").

Sotto identifichiamo la input text (HtmlInputText) e la textarea (HtmlInputTextarea) da resettare.

Come vedete è importante specificare un id per il form e un id per ogni componente da rintracciare, in quanto il metodo findComponent richiede come parametro una string che deve essere composta così: id_form:id_componente.

Enjoy!