6
votes

Comment réutiliser la longueur de champ sous forme, validation et DDL?

Je travaille sur une application de printemps avec beaucoup de formulaires d'entrée. Je voudrais réutiliser la longueur du champ dans les annotations de formulaire, de validation et de JPA de l'UI. Y a-t-il un moyen élégant de résoudre ce problème. Ma solution pour le moment est d'utiliser des constantes pour déclarer la longueur:

...

<form:input path="firstName" 
    maxlength="<%= Integer.toString(Person.FIRSTNAME_LENGTH) %>"/>

...


2 commentaires

Dominik, votre solution «in-élégante» vous semble très intelligente. Je pourrais peut-être utiliser cela. Bonne question, peu importe, c'est quelque chose que tout le monde doit faire, mais il ne semble pas être construit en solution pour cela.


Je suis content que vous ayez mis une prime ici, je veux voir cela aussi bien. J'aimerais avoir une fonctionnalité pour les primes de la communauté, j'avais lancé dans certains de mes représentants.


3 Réponses :


1
votes

J'ai posé une question similaire lorsque j'utilisais Hibernate,

Durée de la colonne des mappages Hibernate?

aucune idée de la manière de tirer cette information sous JPA, mais si vous utilisez Hibernate comme votre couche sous-jacente, vous pouvez essayer d'accéder à hibernate directement et implémenter la solution ci-dessus.

Cependant, la solution Hibernate est tout aussi inébranlable que la solution que vous avez décrite dans votre réponse, avec l'inconvénient supplémentaire qu'il lie votre implémentation JPA à hiberner.


0 commentaires

12
votes

Il est tout à fait possible d'accéder aux informations stockées dans les annotations. En fait, c'est leur objectif principal: stocker des informations méta sur une classe / un mode / champ. Voici un exemple de la manière d'accéder à la longueur stockée dans une annotation @column: xxx

Vous devez être capable de créer une balise ou une haricot personnalisée pour extraire ces informations génériques. < p> Il n'est pas difficile de créer vos propres annotations. Vous pouvez envisager de créer un qui spécifie quels champs doivent être inclus sur le formulaire, comment ils doivent être rendus, description, etc. que vous ne pouvez créer une forme générique. Ensuite, vous n'avez peut-être pas envie de mélanger le domaine et la présentation.


2 commentaires

C'est une ligne complète, la célèbre driculture Java est vivante et bien. Grand conseil, merci.


Juste un suivi, java.lang.class.getdeclaredfield () jette deux exceptions vérifiées, NosuchfieldException et SecurityException. Cela rend cette méthode un peu plus clunky et est quelque chose à garder à l'esprit si vous essayez de mettre en œuvre cette solution.



0
votes

La solution fournie par EJB lit la valeur annotée de la longueur de la colonne. James McMahon a souligné que cela expose la mise en œuvre de l'hibernate. Cela peut être résolu assez simplement avec des méthodes getter. En supposant qu'il existe une interface pour personne avec une méthode déclarée GetFirstnamelength: xxx


0 commentaires