Massimo Caliman
Massimo Caliman
1 min read

Categories

  • java

Tags

  • Java
  • JavaServerFaces
  • JSF2

Languages

  • Italian

Un anno speso nell’intelligenza artificiale è abbastanza perchè una persona creda in Dio. (Alan Perlis)

Se la proprietà del bean che vogliamo visualizzare è di tipo boolean quello che otterremo nella pagina sono le stringhe true e false, per sostituire la rappresentazione con qualcosa di più orientato all’utente abbiamo bisogno di renderizzare i valori true e false con Yes o No, Vero e Falso, Attivo o Disattivato e così via. Per farlo abbiamo bisogno di creare un Converter e associarlo al nostro elemento outputText. Il codice di esempio visibile sotto realizza un semplice Converter per renderizzare i valori booleani con le stringhe Yes,No.

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

@FacesConverter("booleanToYesNoConverter")
public class BooleanToYesNoConverter implements Converter {

    public BooleanToYesNoConverter() {
    }

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String param) {
        try {
            Boolean result = Boolean.parseBoolean(param);
            return result;
        } catch (Exception exception) {
            throw new ConverterException(exception);
        }
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object obj) {
        try {
            if (obj != null && ((Boolean) obj)) {
                return "Yes";
            } else {
                return "No";
            }
        } catch (Exception exception) {
            throw new ConverterException(exception);
        }
    }
}

Il codice nel file xhtml per la nostra Java Server Faces e semplicemente quello sotto

<h:form>
   <h:outputText value="#{true}" title="" converter="booleanToYesNoConverter"/>
</h:form>

Se poi non ho bisogno del livello di controllo fine di un converter posso risolvere con un operatore ternario e l’uso di EL.

<h:form>
   <h:outputText value="#{false ? 'Yes' : 'No'}" />
</h:form>

L’uso di questa forma si presenta ottimale nel caso l’esigenza di conversione sia localizzata in una sola pagina o per poche occorrenze. La forma con il converter ci permette di accentrare il modello di decodifica in un solo punto, e se volessimo sostiture Yes,No con la rappresentazione Abilitato,Disabilitato sarebbe sufficiente operare la modifica nel codice del nostro BooleanToYesNoConverter.