2016-08-16 3 views
1

Ich habe eine Spring MVC-Webanwendung, wo ich JPA- und Hibernate-Annotationen (plus meine eigenen benutzerdefinierten Anmerkungen) verwenden. Lassen Sie uns sagen, ich habe dieses Objekt:Wie Sie die Anmerkungen (JPA und Hibernate) eines Feldes eines POJO in einer JSP-Seite abrufen

public class User{  
    @Size(min = 2, max = 20) 
    private String name; 
} 

Gibt es eine Möglichkeit, die Annotation Werte meines Objekts aus einer jsp Seite zu bekommen? So etwas wie

${User.name.Size.min} 

Ich hoffe, ich habe klar gewesen.

Vielen Dank im Voraus

Antwort

1

Klingt wie Sie nicht tun sollten, aber das kann Ihnen den Einstieg. Ich würde eine andere Klasse für die Reflexion erstellen. Das JSP sucht die Eigenschaften nach Gettern.

public class UserAnnotationResolver { 

    public static FieldAnnotationResolver getName() { 
     try { 
      return new UserAnnotationResolver().new FieldAnnotationResolver(User.class.getDeclaredField("name")); 
     } catch (NoSuchFieldException e) { 

     } 
     return null; 
    } 

    public class FieldAnnotationResolver { 

     private Field field; 

     public FieldAnnotationResolver(Field field) { 
      this.field = field; 
     } 

     SizeAnnotationResolver getSize() { 
      return new SizeAnnotationResolver(field.getAnnotationsByType(Size.class)[0]); 
     } 
    } 

    public class SizeAnnotationResolver { 

     Size size; 

     public SizeAnnotationResolver(Size size) { 
      this.size = size; 
     } 

     public int getMin() { 
      return size.min(); 
     } 

     public int getMax() { 
      return size.max(); 
     } 

    } 

} 
+0

Danke Mann. Eigentlich habe ich schon eine Klasse wie deine entwickelt, aber ich habe mich gefragt, ob es noch einen einfacheren Weg gibt ... – MDP

1

eine andere Art und Weise, dies zu tun ist, indem eine Konstante zu schaffen, dass Sie in Ihrer Anmerkung verwenden würde:

public class User {  

    public static final int SIZE_NAME_MIN = 2; 

    public static final int SIZE_NAME_MAX = 20; 

    @Size(min = SIZE_NAME_MIN, max = SIZE_NAME_MAX) 
    private String name; 
} 

Sie diese Konstante, die Sie halten können entweder in der Klasse oder woanders

Verwandte Themen