2017-08-17 6 views
5

Nous avons plusieurs objets de domaine avec des champs nullables. Nous avons lu qu'hibernate avait besoin de l'objet 'raw' pour le mapper correctement, donc nos getters retournent des options. Nos objets de domaine ressembler à ceci:Comment gérer les options dans JSPX?

public class User { 

    private String firstName; 

    private User boss; 

    public Optional<String> getFirstName(){ 
     .... 
    } 

    public Optional<User> getBoss() { 
     ... 
    } 
} 

Mais maintenant, nous avons des problèmes résoudre/lier ces champs dans les fichiers française.jspx. (Les deux affichent aussi bien que dans les champs d'entrée de formulaire.) Pour les types primitifs et les chaînes, nous pourrions contourner ceci en définissant un CustomToStringConverter personnalisé.

Encore un problème sont des références nullables à d'autres objets de domaine.

Nous avons envisagé plusieurs options, mais ne sont pas vraiment satisfaits de l'un d'eux:

  • Définition Convertisseurs personnalisés pour tous les objets de domaine et types (conduiraient à de nombreux convertisseurs et ne semble pas fonctionner pour les champs d'entrée
  • Définition des accesseurs facultatifs et non optionnels sur chaque objet de domaine (1. dupliquer le code, 2.nous voulons indiquer les champs valables, 3. ne pas se sentir propre pour accéder différemment aux champs facultatifs et non optionnels)
  • Définition d'une 'commande show' qui renvoie la valeur 'raw' ou null (code dupliqué)
  • Définition TagX personnalisé qui gère optionals (lorsque l'objet de domaine devient non-option que nous devrions changer la TagX)

On se demande s'il y a un moyen agréable et propre pour résoudre optionals dans JSPX.

Répondre

0

En ce qui concerne la liaison de forme, Spring gère ceci plutôt bien: par ex. Il mappera la première valeur ci-dessous à Optional.empty(), et la deuxième et la troisième à la Optional<Boolean> appropriée.

<form:select path="anOptionalBoolean"> 
    <form:option value="" label="Not Specified"/> 
    <form:option value="true" label="Yes"/> 
    <form:option value="false" label="No"/> 
</form:select> 

En termes d'affichage des valeurs, je n'ai trouvé rien de mieux que d'utiliser simplement .get et .present etc. dans les expressions EL. Cela fait un code assez lourd.