Das Problem, wieso man überhaupt Converter braucht, ist, dass der Webbrowser nur mit Strings arbeiten und diese darstellen kann.
Die Funktion getName() bringt einem hier nichts, eher noch die Methode toString(), da wir darüber eine Möglichkeit hätten eine String-Repräsentation der Objektinstanz, die dargestellt werden soll, zu erhalten.
Schwierig wird nun aber die andere Richtung. Nach irgendeiner Interaktion mit dem Benutzer (beispielsweise die Auswahl eines Datensatzes aus einem Menü) soll dem ausgewählte String (!) für die Weiterverarbeitung wieder eine entsprechende Objektinstand eines Java-Datentyps zugeordnet werden. Und da kommen eben die Konverter ins Spiel. Man will eine umkehrbare Abbildung von einem Javaobjekt auf einen String. Man möchte also einem bestimmten Objekt einen String zuordnen können und andersherum diesem String auch wieder das gleiche Objekt zuordnen können.
Beim überschreiben der toString()-Methode hat man in der Regel mehr Freiheiten.
Du kannst für jeden Datentyp, der konvertierbar sein muss, eine Klasse anlegen, die von Converter erbt. Alternativ kannst du aber auch überall dort, wo du einen Konverter brauchst eine Methode mit dem Rückgabewert Converter in deine BackingBean schreiben. Was jetzt besser ist, kann man sicher nicht so pauschal sagen, sondern hängt primär vom persönlichen Stil ab. Die erste Variante finde ich selbst übersichtlicher.